Если у меня есть следующие таблицы.
PARENT: PARENT_ID serial, DESCRIPTION character varying(50)
CHILD: PARENT_ID integer, CHILD_ID integer, DESCRIPTION character varying(50)
То, что я хотел бы видеть, - это каждая строка в CHILD, имеющая CHILD_ID, который начинается с 1 и увеличивается на 1, уникально для PARENT_ID. Это было бы похоже на номер ревизии. Например ..
PARENT_ID 1, CHILD_ID 1
PARENT_ID 1, CHILD_ID 2
PARENT_ID 1, CHILD_ID 3
PARENT_ID 2, CHILD_ID 1
PARENT_ID 3, CHILD_ID 1
PARENT_ID 3, CHILD_ID 2
Есть ли способ автоматически назначить значение CHILD_ID, например последовательность или ограничение, только с возможностью повторного использования CHILD_ID, который был удален? Единственный способ, которым я могу понять, - это что-то вроде этого SQL.
INSERT INTO child SELECT parent_id, MAX(child_id)+1, 'description' FROM child WHERE parent_id = :PARENT_ID GROUP BY parent_id
Это что-то вроде хака. Я понимаю, что нормализация базы данных предполагает, что у вас не должно быть одного ключа, связанного с другим, но у меня нет этого варианта по некоторым другим причинам. Есть идеи?
РЕДАКТИРОВАТЬ: Название ужасно. Если кто-нибудь из вас с высокими показателями может подумать о том, кто более точен, пожалуйста, не стесняйтесь его менять.