Par exemple
create table indexing_table
(
id SERIAL PRIMARY KEY,
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
);
Y a-t-il une différence entre les tableaux suivants?
Tableau 1:
create table referencing_table
(
indexing_table_id INTEGER references indexing_table
);
Tableau 2:
create table referencing_table
(
indexing_table_id INTEGER references indexing_table NOT NULL
);
Alternativement, dans le cas du tableau 1, où il n'y a pas de NOT NULL
contrainte, sommes-nous autorisés à insérer des enregistrements contenant NULL
valeurs?
Pour le tableau 1, cette instruction INSERT réussira. Si vous l'exécutez 100 fois, il réussira 100 fois.
insert into referencing_table values (null);
La même instruction INSERT échouera sur le tableau 2.
ERREUR: la valeur nulle dans la colonne "indexing_table_id" viole la contrainte non nulle DÉTAIL: La ligne défaillante contient (null).
Parfois, vous souhaitez qu'une colonne à clé étrangère soit annulable car elle n'est pas obligatoire (tout comme tous les citoyen dans une table de citoyens ne sont pas allés à l'université, donc un university_id
la colonne peut être nulle). Dans d'autres cas, la colonne ne doit pas être nulle, tout comme chaque étudiant l devrait être associé à un university_id
.
Par conséquent, les deux referencing_table
s que vous décrivez sont en réalité très différents, si vous considérez ce que vous essayez de réaliser.