Je suis probablement borné, mais si je crée une contrainte de clé étrangère et qu'une ligne est mise à jour ou supprimée, je perds cette connexion si la colonne de la table enfant est définie sur NULL.
Quel est le but de conserver intentionnellement ces lignes orphelines?
foreign-key
null
Derek Downey
la source
la source
Réponses:
L'
set null
utilité ou non dépend de ce que vous avez choisinull
de signifier dans le contexte particulier - avec toute la confusion et l'opinion autour de l'null
OMI, l'approche raisonnable est que le DBAAvec ces règles, considérez le cas d'utilisation suivant:
null
pour représenter une boutique indépendante (c'est-à-dire qui ne fait pas partie d'une chaîne)Dans ce cas, un
on delete set null
fait sens. Il existe d'autres façons de modéliser ces règles commerciales, mais c'est la plus simple et si elle correspond exactement aux faits qui vous intéressent dans le monde réel, je suggère que c'est parfaitement correctla source
La plupart des cas d'utilisation auxquels je peux penser sont généralement de la forme "Eh bien, nous pourrions faire quelque chose de différent mais nous avions envie de le faire à la place".
Considérez un
owner
champ pour un bug dans un système de suivi des problèmes dans une entreprise. Si John quitte, sûrement tous ses problèmes ne devraient pas simplement être supprimés lorsque son compte est supprimé. Même alors, certaines bases de données autorisentSET DEFAULT
une action (ou un déclencheur effectue la même tâche), et avoir unNobody
employé comme propriétaire par défaut des problèmes pourrait être une option. Ou nous pourrions avoir undisabled
champ pour John plutôt que de supprimer son enregistrement.la source
RESTRICT
), si ce n'est pour aucune autre raison que de blâmer un vieil employé en cas de problème!