Dans le tableau suivant, existe-t-il un moyen de garantir que PreviousID référence toujours un ID dans une rangée avec un ParentID correspondant ou, si ParentID est null, il est également null dans la ligne référencée?Clé étrangère composée avec colonne nullable
CREATE TABLE MyTable (
ID int not null identity(1,1) primary key,
ParentID int null foreign key references MyTable (ID),
PreviousID int null foreign key reference MyTable (ID),
foreign key (ParentID, PreviousID) references MyTable (ParentID, ID)
)
Un exemple:
+-ID-+-ParentID-+-PreviousID-+ | 1 | NULL | NULL | | 2 | 1 | NULL | | 3 | NULL | 2 | <-- shouldn't be possible, should have to refer to ID where ParentID is null +----+----------+------------+
est-il un moyen de faire respecter cela?
MISE À JOUR: Pour ceux qui se demandent, le composé clé étrangère n'applique pas pour la raison suivante (copié à partir MSDN):
Une contrainte FOREIGN KEY peut contenir des valeurs nulles; Toutefois, si une colonne d'une contrainte composite FOREIGN KEY contient des valeurs NULL, la vérification de toutes les valeurs qui constituent la contrainte FOREIGN KEY est ignorée. Pour vous assurer que toutes les valeurs d'une contrainte composite FOREIGN KEY sont vérifiées, spécifiez NOT NULL sur toutes les colonnes participantes.
UPDATE: Dans le cas où il permet de visualiser la structure de données étant représentée, il est un arbre B, où les noeuds ayant le même parent composer une liste liée. J'essaye de faire en sorte que chaque pointeur 'précédent' dans la liste liée pointe vers un autre noeud avec le même parent. Dans le cas où le parent est null, il doit pointer vers un autre nœud où le parent est également nul.
Triggers? Il n'appliquera pas, mais peut vous aider à le gérer. –
Et à quelle valeur ID dans MyTable doit ParentID NULL référence? –
Lorsqu'il existe une valeur, ParentID doit référencer ParentID. Quand il n'y en a pas, eh bien ... c'est le problème que j'aimerais résoudre. Comme une clé étrangère composée ne fait pas l'affaire, je cherche d'autres options. – Daniel