Cet exemple est tiré de w3schools .
CREATE TABLE Persons
(
P_Id int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
CONSTRAINT pk_PersonID PRIMARY KEY (P_Id,LastName)
)
Je crois comprendre que les deux colonnes ensemble ( P_Id
et LastName
) représentent une clé primaire pour la table Persons
. Est-ce correct?
- Pourquoi quelqu'un voudrait-il utiliser plusieurs colonnes comme clés primaires au lieu d'une seule colonne?
- Combien de colonnes peuvent être utilisées ensemble comme clé primaire dans une table donnée?
Réponses:
Votre compréhension est correcte.
Vous feriez cela dans de nombreux cas. Un exemple est dans une relation comme
OrderHeader
etOrderDetail
. Le PKOrderHeader
pourrait êtreOrderNumber
. Le PK dansOrderDetail
pourrait êtreOrderNumber
ANDLineNumber
. S'il s'agissait de l'un de ces deux, ce ne serait pas unique, mais la combinaison des deux est garantie unique.L'alternative consiste à utiliser une clé primaire générée (non intelligente), par exemple dans ce cas
OrderDetailId
. Mais alors, vous ne verriez pas toujours la relation aussi facilement. Certaines personnes préfèrent un sens; certains préfèrent l'autre manière.la source
Un autre exemple de clés primaires composées est l'utilisation des tables d'association. Supposons que vous ayez une table de personnes contenant un ensemble de personnes et une table de groupes contenant un ensemble de groupes. Vous voulez maintenant créer une relation plusieurs à plusieurs sur une personne et un groupe. Cela signifie que chaque personne peut appartenir à de nombreux groupes. Voici à quoi ressemblerait la structure de la table en utilisant une clé primaire composée.
la source
L'exemple W3Schools ne dit pas quand vous devez utiliser des clés primaires composées et ne donne qu'un exemple de syntaxe en utilisant le même exemple de tableau que pour les autres clés.
Leur choix d'exemple vous trompe peut-être en combinant une clé sans signification (P_Id) et une clé naturelle (LastName). Ce choix étrange de clé primaire indique que les lignes suivantes sont valides selon le schéma et sont nécessaires pour identifier de manière unique un étudiant. Intuitivement, cela n'a aucun sens.
Lectures complémentaires: Le grand débat sur la clé primaire ou simplement Google
meaningless primary keys
ou même parcourez ceci question SOFWIW - Mon 2 centimes est d'éviter les clés primaires multi-colonnes et d'utiliser un seul champ d'identifiant généré (clé de substitution) comme clé primaire et d'ajouter des contraintes (uniques) supplémentaires si nécessaire.
la source
Vous utilisez une clé composée (une clé avec plus d'un attribut) chaque fois que vous souhaitez garantir l'unicité d'une combinaison de plusieurs attributs. Une seule clé d'attribut ne permettrait pas d'obtenir la même chose.
la source
Oui, ils forment tous les deux la clé primaire. Surtout dans les tables où vous n'avez pas de clé de substitution , il peut être nécessaire de spécifier plusieurs attributs comme identifiant unique pour chaque enregistrement (mauvais exemple: une table avec à la fois un prénom et un nom de famille peut exiger que leur combinaison soit unique).
la source
En général, plusieurs colonnes dans une clé seront moins performantes qu'une clé de substitution. Je préfère avoir une clé de substitution puis un index unique sur une clé multicolonne. De cette façon, vous pouvez avoir de meilleures performances et l'unicité nécessaire est maintenue. Et encore mieux, lorsque l'une des valeurs de cette clé change, vous n'avez pas non plus à mettre à jour un million d'entrées enfants dans 215 tables enfants.
la source
Votre deuxième question
est spécifique à l'implémentation: il est défini dans le SGBD réel utilisé. [1], [2], [3] Vous devez inspecter les spécifications techniques du système de base de données que vous utilisez. Certains sont très détaillés, d'autres non. La recherche sur le Web à propos de telles limitations peut être difficile car la terminologie varie. Le terme clé primaire composite doit être obligatoire;)
Si vous ne trouvez pas d'informations explicites, essayez de créer une base de données de test pour vous assurer que vous pouvez vous attendre à une gestion stable (et spécifique) des violations de limites (auxquelles il faut s'attendre). Faites attention à obtenir les bonnes informations à ce sujet: parfois, les limites sont accumulées et vous verrez des résultats différents avec différentes dispositions de base de données.
la source
L'utilisation d'une clé primaire sur plusieurs tables est pratique lorsque vous utilisez une table intermédiaire dans une base de données relationnelle.
J'utiliserai une base de données que j'ai créée une fois pour un exemple et en particulier trois tables dans cette table. J'ai créé une base de données pour une bande dessinée il y a quelques années. Une table s'appelait «bandes dessinées» - une liste de toutes les bandes dessinées, leurs titres, le nom du fichier image, etc. La clé primaire était «comicnum».
Le deuxième tableau était «caractères» - leurs noms et une brève description. La clé primaire était sur "charname".
Étant donné que chaque bande dessinée - à quelques exceptions près - avait plusieurs personnages et que chaque personnage apparaissait dans plusieurs bandes dessinées, il était impossible de mettre une colonne dans «personnages» ou «bandes dessinées» pour refléter cela. Au lieu de cela, j'ai créé une troisième table qui s'appelait "comicchars", et c'était une liste des personnages apparaissant dans quelles bandes dessinées. Comme cette table rejoignait essentiellement les deux tables, elle n'avait besoin que de deux colonnes: charname et comicnum, et la clé primaire était sur les deux.
la source
Nous créons des clés primaires composites pour garantir l'unicité des valeurs de colonne qui composent un seul enregistrement. C'est une contrainte qui permet d'éviter l'insertion de données qui ne doivent pas être dupliquées.
Par exemple: si tous les identifiants d'étudiant et les numéros de certificat de naissance sont attribués de manière unique à une seule personne. Ensuite, ce serait une bonne idée de faire de la clé primaire d'une personne une composition d'identifiant d'étudiant et de numéro d'acte de naissance, car cela vous éviterait d'insérer accidentellement deux personnes qui ont des identifiants d'étudiant différents et le même certificat de naissance.
la source