Appliquer une contrainte de clé étrangère aux colonnes de la même table
Comment appliquer une contrainte de clé étrangère sur les colonnes de la même table dans SQL lors de la saisie des valeurs dans le tableau suivant:
employé:
- empid nombre,
- gestionnaire de nombre (doit être un employé existant)
source d'informationauteur pop stack
Vous devez vous connecter pour publier un commentaire.
Espère que cela aide!
Oracle appeler cela une auto-contrainte d'intégrité référentielle. La documentation est ici pour une description,
Vous créez une auto-référentielle de la contrainte, de la même manière que vous le feriez pour un:
Je suis en supposant que votre
manager_no
est nullable. J'ai ajouté set null ici comme undelete cascade
serait probablement essuyer une quantité importante de votre table.Je ne peux pas penser à une meilleure façon de le faire. La suppression d'un manager ne doit pas entraîner la suppression de tous leurs employés, de sorte que vous avez à
set null
et ont un trigger sur la table pour vous avertir de toute personne sans manager.J'aime toujours cette site, ce qui est bon pour de simples références. et n'oubliez pas d'avoir un indice sur la FK ainsi ou Tom va hurler à vous :-).
On peut aussi utiliser Oracle standard syntaxe pour créer une auto-référentielle de FK dans l'instruction create table, qui se présenterait comme suit.
EDIT:
En réponse à @popstack de commentaire ci-dessous:
Alors que vous pouvez le faire en une seule instruction de ne pas être en mesure de modifier un tableau est assez ridicule de la situation. Vous devriez certainement analyser un tableau que vous allez choisir à partir et vous aurez envie d'un index sur la clé étrangère ( et peut-être plus de colonnes et /ou de plusieurs index ) sinon à chaque fois que vous utilisez la clé étrangère vous allez faire un full table scan. Voir mon lien pour asktom ci-dessus.
Si vous n'êtes pas en mesure de modifier une table, alors vous devriez, dans l'ordre décroissant de leur importance.
AUTO RÉFÉRENCES REQUÊTE...
EX-
ALTER TABLE Employee ADD CONSTRAINTS Fr_key( mgr_no) references employee(Emp_no) ON DELETE CASCADE;