2017-08-09 3 views
0

Je comprends que, sauf indication contraire, les colonnes de clé étrangère peuvent être NULL et dupliquées (au moins dans Oracle SQL). Est-il préférable d'avoir des colonnes de clés étrangères déclarées non nulles et uniques ou de les laisser telles quelles? Est-ce une décision qui devrait être prise en fonction de la situation ou y a-t-il une règle générale à suivre?Les colonnes de clé étrangère doivent-elles être uniques et non nulles?

+0

Cela n'a rien à voir avec Oracle SQL et tout ce qui concerne la modélisation de données. Vous pouvez avoir des contraintes référentielles où la colonne est nullable ou non nulle, et elles sont généralement non uniques, sauf dans le cas d'une relation 1: 1, auquel cas vous y ajouteriez une contrainte unique. –

Répondre

2

Toutes les bases de données permettent aux clés étrangères d'être NULL et non UNIQUE. La manière dont vous choisissez de déclarer une clé étrangère particulière dépend de l'analyse de rentabilisation. Considérez les tableaux suivants utilisés par une entreprise qui vend des fournitures à des agents secrets. De toute évidence, HomeCountryCode ne sera pas unique car vous pouvez vendre à plus d'un espion dans chaque pays. Il est clair que HomeCountryCode ne sera pas unique. Est-ce Nullable? Cela dépend si votre modèle d'affaires exige chaque client de déclarer leur pays d'origine ou non. Si le modèle vous permet de faire des affaires avec quelqu'un qui n'a pas de pays d'origine, ou ne souhaite pas vous révéler le pays d'origine, alors le champ devrait être NULL. Mais si un acteur sans état n'est pas envisagé dans votre modèle d'entreprise, vous devez déclarer la colonne NOT NULL de sorte qu'un enregistrement client non valide ne puisse pas être créé.

Maintenant, considérons la table supplémentaire

SpyMasters (
    CountryCode NOT NULL PRIMARY KEY References CountryList(CountryCode), 
    Name NOT NULL PRIMARY KEY 
) 

Ce tableau répertorie la tête (singleton) d'espionnage au profit de ces pays qui ont un maître espion. Tous les pays n'apparaîtront pas dans cette liste, mais chaque pays ne peut apparaître qu'une seule fois. Dans ce cas, le champ CountryCode est UNIQUE - mais vous n'avez pas à le déclarer explicitement car PRIMARY KEY inclut toujours l'unicité.

1

La clé étrangère est un attribut d'une autre table. Dans la table d'origine ("table référencée"), la clé étrangère doit être unique et non NULL. En fait, il devrait presque toujours être la clé primaire de cette table.

Dans la table de référence, la colonne de référence ne doit être déclarée que si NULL est toujours nécessaire. Il ne devrait être déclaré que si vous ne voulez jamais de doublons. En d'autres termes, cela dépend des caractéristiques de la table référençant, et non de la table référencée.