web-dev-qa-db-fra.com

Quelle est la différence entre clé étrangère et clé de référence?

Je suis très confus à propos de ces deux termes. sont-ils les mêmes ou différents?

Certains livres et personnes disent qu'ils sont identiques et d'autres disent qu'ils sont différents.

J'ai essayé mais je n'ai pas trouvé de réponse concluante.

25
Anderson

Je suppose que vous parlez d'utiliser la variable REFERENCES lorsque le mot clé FOREIGN KEY n'est pas utilisé, par exemple.

author_id INTEGER REFERENCES author(id)

... au lieu de ...

author_id INTEGER,
FOREIGN KEY(author_id) REFERENCES author(id)

La réponse est qu'il s'agit simplement d'une syntaxe abrégée pour la même chose. La principale préoccupation lors de la modification entre les deux devrait être la lisibilité.

48
Niels Abildgaard

"Clé de référence" n'est pas un terme technique normal dans la modélisation relationnelle ou dans l'implémentation SQL en anglais américain. 

Une clé étrangère "référence" une clé dans une autre table; cela pourrait-il être la source de la confusion?

Vous n’appelez pas vraiment quelque chose de référence clé ... C’est la même chose ... vous pouvez voir le mot références utilisé par exemple dans sqlite: vous pouvez utiliser une syntaxe comme celle-ci pour démarrer db d'auteurs et de livres. Cela vous permet de montrer qu'un auteur peut avoir plusieurs livres. Cela indique à la base de données que books.author_id (défini quelques lignes plus haut) fait référence à author.id 

CREATE TABLE 'author' (
    id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
    firstname varchar(255)
    lastname varchar(255)
);

CREATE TABLE 'books' (
    id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
    author_id INTEGER,
    title varchar(255),
    published date,
    FOREIGN KEY(author_id) REFERENCES author(id)
);
6
maneesha

Peut-être utilisez-vous le terme "clé de référence" de manière un peu vague?

Une valeur de clé étrangère dans une ligne est dite "référencer" la ligne qui contient la valeur de clé correspondante. Notez que le mot "référence" dans la phrase précédente est un verbe. Nous pouvons donc dire que nous avons une valeur de clé étrangère référençant et une valeur de clé référencée. 

Bien que ce soit les valeurs de clé, plutôt que la contrainte de clé de table, qui soient référencées, je suppose que nous pourrions dire en termes clairs "clé référencée" pour signifier les lignes qui comprennent les valeurs potentiellement potentiellement référencées. Je vois alors comment "clé référencée" pourrait devenir "clé référencée" sans démentir son origine.

3
onedaywhen

Une clé étrangère doit fait référence à une clé primaire . Lorsque vous utilisez simplement la contrainte REFERENCES, il n'est pas nécessaire que la clé référencée soit une clé primaire. 

2
alpha

Une clé étrangère "référence" une clé dans une autre table. Cette clé dans une autre table s'appelle Clé référencée. Vous entendrez probablement beaucoup parler de cela si vous utilisez la fonction graphique sur phpmyadmin.

2
Matt Junior

La seule et la plus importante différence entre les mots clés "FOREIGN KEY" et "REFERENCES" réside dans le fait que les deux mots font que les données sont des données enfants de la table parente, la "FOREIGN KEY" permet de créer une contrainte de niveau Le mot clé REFERENCES peut uniquement être utilisé pour créer une contrainte au niveau de la colonne.Les contraintes au niveau de la colonne ne peuvent être créées que lors de la création de la table uniquement. Vous pouvez toutefois ajouter des contraintes au niveau de la table à l'aide de la commande ALTER TABLE.

1
user7901336

Il existe 2 façons de déclarer une clé étrangère:

  1. si la clé étrangère est un attribut SIMPLE:
    RÉFÉRENCES ()

  2. si les clés étrangères sont une liste d'attributs

CLÉ ÉTRANGÈRE () RÉFÉRENCES 

1
Sebastian Nedumala