2014-11-05 46 views
2

唯一的序列號下面是一個說明性的例子傳達了問題陳述 -生成每個類型

說我有一個表叫Animal這對於所有動物種類例如存儲數據catdogcowmonkey

Animal table 
id type_id type json_data 

現在的業務要求是type_id值應爲每type一致和順序。例如

id(PK) type_id type json_data 
1    1 cat  
2    2 cat  
3    50 dog 
4    51 dog 
5    3 cat 
6    52 dog 

DB是postgres的,包膜是Scala和油滑爲持久層種類每隻動物型序列發生器的

,如在所提到的每個記錄應具有基於該類型獨特的產生(類型)ID,但順序這個例子。對於所有的貓記錄,type_id必須是唯一的,順序的,所有的狗記錄都是一樣的。創建這種連續的Ids而不與其他類型的ID產生衝突的最佳方式是什麼?

+0

稱爲'AnimalTypes'另一個表,其中'type_id'是一個外鍵'AnimalTypes.id'裏面的功能,因爲這是關係數據庫對於。 – 2014-11-05 16:31:29

+0

@ m-z:只是在問題中添加更多細節。請讓我知道問題中是否有任何混淆。 – user2066049 2014-11-05 16:40:57

回答

0

我想你需要的功能,並致電INSERT INTO

-- Create the function 
    CREATE OR REPLACE FUNCTION last_category(in varchar(50)) 
    RETURNS INT AS 
    $BODY$ 
    DECLARE 
    some_input ALIAS FOR $1; 
    last_category int; 
    BEGIN 
    select max(type_id) + 1 into last_category from animal where type=some_input; 
    return last_category; 
    END$BODY$ 
    LANGUAGE plpgsql VOLATILE 
    COST 100; 
    ALTER FUNCTION last_category(in varchar(50)) 
    OWNER TO postgres; 
    COMMENT ON FUNCTION last_category(in varchar(50)) IS 'FUNCTION JUST FOR TEST'; 

-- Now, call the function inside your INSERT INTO 
insert into animal values(3,last_category('cat'),'cat',''); 
+0

你知道這可以與Slick一起工作嗎? – user2066049 2014-11-07 19:27:16

+0

@ user2066049根據[this](http://stackoverflow.com/questions/18454056/calling-stored-procedures-with-slick)你必須使用普通查詢來做到這一點。我之前沒有使用過Slick,但是我認爲如果你用Slick的方式做到這一點,算法會一樣 – 2014-11-07 20:57:29