1
votes

FOREIGN KEY peut-il être omis dans PostgreSQL lors de l'utilisation de REFERENCES?

Je me demande s'il existe une différence (peut-être subtile) entre ces deux instructions SQL:

CREATE TABLE profiles (
    profile_id SERIAL PRIMARY KEY NOT NULL,
    bio TEXT,
    user_id INTEGER NOT NULL REFERENCES users(user_id) 
);

et

CREATE TABLE profiles (
    profile_id SERIAL PRIMARY KEY NOT NULL,
    bio TEXT,
    user_id INTEGER NOT NULL,
    FOREIGN KEY (user_id) REFERENCES users(user_id)
);

I ' J'ai remarqué que lorsque je crée une table dans Postico avec la première notation, mais que je regarde le DDL de la table profiles créée plus tard, la FOREIGN KEY est supprimée et je me retrouve avec la deuxième notation la plus courte.

Créer une table avec FOREIGN KEY :

La vue DDL n'affiche pas FOREIGN KEY :

Donc, je me demande (et je cherche la confirmation) que les deux déclarations sont en fait équivalentes à 100% ou s'il y a des différences subtiles dans ce qu'ils font à la base de données.

Tout pointeur vers des ressources officielles (et peut-être aussi en quoi cela diffère de MySQL) serait apprécié.


3 Réponses :


1
votes

Dans PostgreSQL, vous définissez une clé étrangère via une contrainte de clé étrangère. Une contrainte de clé étrangère indique que les valeurs d'une colonne ou d'un groupe de colonnes de la table enfant correspondent aux valeurs d'une colonne ou d'un groupe de colonnes de la table parent. Nous disons qu'une contrainte de clé étrangère maintient l'intégrité référentielle entre les tables enfant et parent.

Cela peut vous expliquer mieux ou vous pouvez en savoir plus sur Documentation sur les clés étrangères .


0 commentaires

1
votes

La vue DDL n'affiche pas FOREIGN KEY

Vue DDL créée par un outil tiers inconnu dans pas un argument.

Voir violon . La clé étrangère existe dans les deux cas. De plus, je ne vois pas la différence de résultat pour les deux requêtes DDL.

PS. À titre de recommandation - spécifiez toujours le nom de la contrainte explicitement. Et si vous devez le supprimer? C'est problématique sans le nom de la contrainte ...


0 commentaires

2
votes

Les deux exemples que vous montrez font la même chose, mais avec une syntaxe différente.

La première méthode est appelée contrainte de table , la seconde contrainte de colonne , mais ce dernier nom est quelque peu trompeur car la contrainte est également sur la table.

La principale différence est que la syntaxe de contrainte de colonne est plus courte, mais ne peut pas être utilisée pour toutes les contraintes: si vous avez par exemple une clé primaire qui contient deux colonnes, vous devez l'écrire dans la syntaxe de contrainte de table.


0 commentaires