Pourquoi utiliser plusieurs colonnes de clés primaires (clé primaire composite)
Cet exemple est pris 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)
)
Ma compréhension est que les deux colonnes (P_Id
et LastName
) représentent une clé primaire pour la table Persons
. Est-ce correct?
- Pourquoi une personne voudrait utiliser plusieurs colonnes de clés primaires au lieu d'une seule colonne?
- Le nombre de colonnes peut être utilisé comme clé primaire dans une table donnée?
- ...maintenant, il y a aussi un réponse pour les 2'nd question
- Peters. Pourquoi la Réponse était supprimé ?
Vous devez vous connecter pour publier un commentaire.
Votre compréhension est correcte.
Vous voulez faire cela dans de nombreux cas. Un exemple est dans une relation comme
OrderHeader
etOrderDetail
. Le PK dansOrderHeader
pourrait êtreOrderNumber
. Le PK dansOrderDetail
pourrait êtreOrderNumber
ETLineNumber
. Si c'était l'une de ces deux, il ne serait pas unique, mais la combinaison des deux est garanti unique.L'alternative est d'utiliser un générés (non intelligent) clé primaire, par exemple, dans ce cas
OrderDetailId
. Mais alors vous ne serait pas toujours à voir la relation aussi facilement. Certaines personnes préfèrent d'une manière; certains préfèrent l'autre sens.Un autre exemple de composé des clés primaires sont l'utilisation des tables d'Association. Supposons que vous avez une table qui contient un ensemble de personnes et une table de groupe qui contient un ensemble de groupes. Maintenant, vous voulez créer un beaucoup de beaucoup de relation de personne et de groupe. Ce qui signifie que chaque personne peut appartenir à plusieurs groupes. Voici ce que la structure de la table ressemblerait à l'aide d'un composé de la clé primaire.
La W3Schools l'exemple n'est pas à dire quand vous devez utiliser composé des clés primaires, et est seulement de donner l'exemple de la syntaxe en utilisant le même exemple avec la table pour d'autres touches.
Leur choix de l'exemple est peut-être vous induire en erreur en combinant un sens clés (P_Id) et une clé naturelle (LastName). Ce drôle de choix de la clé primaire dit que les lignes suivantes sont valides selon le schéma et sont nécessaires pour identifier de manière unique un étudiant. Intuitivement, cela ne fait pas de sens.
Pour en savoir plus: La grande clé primaire débat ou tout simplement Google
meaningless primary keys
ou même parcourir ce DONC, la questionFWIW - Mes 2 centimes, c'est pour éviter le multi-colonnes clés primaires et l'utilisation d'un unique généré champ id (clé de substitution) en tant que clé primaire et à l'ajout de (unique) des contraintes si nécessaire.
Vous utilisez un composé de clés (une clé avec plus d'un attribut) chaque fois que vous voulez vous assurer de l'unicité d'une combinaison de plusieurs attributs. Un seul attribut clé ne permettrait pas de réaliser la même chose.
Oui, ils ont à la fois la forme de la clé primaire. En particulier dans les tableaux 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: un tableau contenant à la fois un nom et de prénom peut nécessiter la combinaison d'entre eux à être unique).
Plusieurs colonnes dans une clé vont, en général, effectuer plus de mal que d'une clé de substitution. Je préfère avoir une clé de substitution et puis un index unique sur une clé multicolonne. De cette façon, vous pouvez avoir de meilleures performances et l'unicité nécessaire est maintenu. Et mieux encore, lorsque l'une des valeurs que les principaux changements, vous n'avez pas de mise à jour d'un million d'entrées enfant dans 215 tables enfants.
Votre deuxième question
la mise en œuvre est spécifique: elle est définie dans le SGBD 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, certains ne le sont pas. La recherche sur le web à propos de ces limites peut être difficile parce que la terminologie varie. Le terme clé primaire composite devrait être obligatoire 😉
Si vous ne trouvez pas d'informations explicites, essayez de créer une base de données de test pour s'assurer que vous pouvez vous attendre stable (et spécifiques) de la manipulation de la violation de la limite (qui sont à prévoir). Attention, pour obtenir la bonne information à ce sujet: parfois, les limites sont accumulés, et vous verrez des résultats différents avec différentes mises en page de base de données.
À l'aide d'une clé primaire sur plusieurs tables est très pratique lorsque vous êtes en utilisant une table intermédiaire dans une base de données relationnelle.
Je vais utiliser une base de données j'ai fait une fois pour un exemple, et plus précisément de trois tables à l'intérieur de cette table. Je creäted une base de données pour une bande dessinée il y a quelques années. Un tableau a été appelé "comics"—une liste de toutes les bandes dessinées, leurs titres, le nom de fichier d'image, etc. La clé primaire est "comicnum".
La deuxième table était "caractères", leur nom et une brève description. La clé primaire est sur "charname".
Depuis chaque comic—à quelques exceptions près—ont eu de multiples personnages et chaque personnage est apparu dans plusieurs comics, il était impossible de mettre une colonne en "caractères" ou "comics" pour refléter cela. Au lieu de cela, je creäted un troisième table a été appelé "comicchars", et qui était une liste de caractères qui est apparu dans laquelle la bande dessinée. Depuis cette table essentiellement à joindre les deux tables, il est nécessaire, mais deux colonnes: charname et comicnum, et la clé primaire a été sur les deux.