web-dev-qa-db-fra.com

Une table de base de données ne peut-elle pas avoir de clé primaire?

Une table de base de données ne peut-elle pas avoir de clé primaire? SQLite vous permet de définir une table sans clé primaire, il ne peut donc pas y avoir d'anomalie d'insertion.

6
user138363

Can vous créez une table de base de données sans clé primaire? Eh bien, vous venez de dire que vous pouvez le faire dans SQLite. Et, je crois que cela est vrai pour presque toutes (sinon toutes) les principales plateformes de SGBD.

Devriez vous créez une table de base de données sans clé primaire? Non.

Chaque table doit avoir une colonne (ou un ensemble de colonnes) qui identifie de manière unique une et une seule ligne. Cela facilite beaucoup la maintenance des données.

C'est vrai, sans clé primaire (ou certains clé unique), vous n'avez pas d'anomalie d'insertion si vous allez insérer plusieurs fois les mêmes données.

Ce que vous avez avez est une table user avec 300 entrées distinctes pour un utilisateur nommé "bob", dont beaucoup ont des valeurs différentes dans les autres colonnes. Et, si vous avez essayé de connecter des lignes d'une autre table à user sans relation clé primaire/clé étrangère - chaque ligne de message marquée comme sent_by "bob" renvoie à chacune de ces 300 user entrées. Oh, et il y a 39 mots de passe uniques pour "bob" (157 des lignes affichent toutes le mot de passe "mot de passe", bien sûr).

Sans clés primaires, les choses peuvent devenir vraiment désordonnées, très rapides.

7
RDFozz