En supposant que j'ai les tables suivantes.Comment créer un numéro de révision auto-incrémenté unique à une clé dans PGSQL?
PARENT: PARENT_ID serial, DESCRIPTION character varying(50)
CHILD: PARENT_ID integer, CHILD_ID integer, DESCRIPTION character varying(50)
Ce que je voudrais voir est chaque ligne ENFANT ayant une child_id qui commence à 1 et par incréments de 1, unique par PARENT_ID. Ce serait semblable à un numéro de révision. Par exemple ..
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
Est-il possible d'avoir la valeur child_id attribuée automatiquement, comme une séquence ou une contrainte, seule la possibilité de réutiliser une child_id qui a été supprimé? La seule façon que je peux comprendre est quelque chose à l'effet de ce SQL.
INSERT INTO child SELECT parent_id, MAX(child_id)+1, 'description' FROM child WHERE parent_id = :PARENT_ID GROUP BY parent_id
C'est un peu bidouillage. Je me rends compte que la normalisation de la base de données suggère que vous ne devriez pas avoir une clé liée à une autre, mais je n'ai pas cette option pour d'autres raisons. Des idées?
EDIT: Le titre est moche. Si l'un d'entre vous, les plus pointus, peut en trouver un qui soit plus précis, n'hésitez pas à le modifier.
Je vous ai donné la réponse acceptée, merci pour la suggestion. J'avais complètement oublié à propos de row_number(). et le partitionnement est sympa. –