以下是传达问题陈述的说明性示例 -
说我有一个名为Animal
的表,它存储所有动物类型的数据,例如cat
,dog
,cow
,monkey
等。
Animal table
id type_id type json_data
现在业务要求是type_id
值应该是type
的一致和顺序。 e.g。
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,Env是Scala和Slick for persistence layer
每种动物类型的序列生成器,每个记录应该具有唯一的生成(类型)id,但是基于示例中提到的类型顺序。对于所有猫的记录,type_id必须是唯一的和顺序的,所有狗记录都是如此。创建此类顺序ID的最佳方法是什么,而不会与其他类型的ID产生冲突?
答案 0 :(得分: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','');