次のテーブルがあると仮定します。
PARENT: PARENT_ID serial, DESCRIPTION character varying(50)
CHILD: PARENT_ID integer, CHILD_ID integer, DESCRIPTION character varying(50)
私が見たいのは、PARENT_IDごとに一意で、1から始まり1ずつ増加するCHILD_IDを持つCHILDの各行です。リビジョン番号に似ています。例えば..
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
しかし、それはちょっとしたハックです。データベースの正規化では、あるキーを別のキーに関連付けるべきではないことが示唆されていますが、他の理由でそのオプションはありません。何か案は?
編集:タイトルは醜いです。スコアの高い方で、より正確な方法を思いついた場合は、お気軽に変更してください。