Dans le modèle relationnel, tout colonne ou ensemble de colonnes qui est garanti à la fois présent et unique dans la table peut être appelé une clé candidate à la table. "Présent" signifie "NOT NULL". Dans la conception de base de données, il est courant de désigner l'une des clés candidates en tant que clé primaire et d'utiliser des références à la clé primaire pour désigner la ligne entière ou l'élément concerné décrit par la ligne.
En SQL, une contrainte PRIMARY KEY correspond à une contrainte NOT NULL pour chaque colonne de clé primaire et à une contrainte UNIQUE pour toutes les colonnes de clé primaire prises ensemble. En pratique, de nombreuses clés primaires s'avèrent être des colonnes simples.
Pour la plupart des produits SGBD, une contrainte PRIMARY KEY entraîne également la création automatique d'un index sur les colonnes de clé primaire. Cela accélère l'activité de vérification des systèmes lorsque de nouvelles entrées sont effectuées pour la clé primaire, afin de s'assurer que la nouvelle valeur ne duplique pas une valeur existante. Il accélère également les recherches en fonction de la valeur de la clé primaire et des jointures entre la clé primaire et une clé étrangère qui la référence. La vitesse d'exécution dépend du fonctionnement de l'optimiseur de requête. À l'origine, les concepteurs de bases de données relationnelles recherchaient les clés naturelles dans les données telles qu'elles sont données. Ces dernières années, la tendance a toujours été de créer une colonne appelée ID, un entier comme première colonne et la clé primaire de chaque table. La fonctionnalité autogénération du SGBD est utilisée pour s'assurer que cette clé sera unique. Cette tendance est documentée dans les "Normes de conception d'Oslo".Ce n'est pas nécessairement un design relationnel, mais il répond à des besoins immédiats des personnes qui le suivent. Je ne recommande pas cette pratique, mais je reconnais que c'est la pratique courante.
Un index est une structure de données qui permet un accès rapide à quelques lignes d'une table, en fonction d'une description des colonnes de la table qui sont indexées. L'index est constitué de copies de certaines colonnes de la table, appelées clés d'index, entrecoupées de pointeurs vers les lignes de la table. Les pointeurs sont généralement cachés aux utilisateurs du SGBD. Les index fonctionnent en tandem avec l'optimiseur de requête. L'utilisateur spécifie dans SQL quelles données sont recherchées et l'optimiseur propose des stratégies d'index et d'autres stratégies pour traduire ce qui est recherché en une stratégie pour le trouver. Il existe une sorte de principe d'organisation, tel que le tri ou le hachage, qui permet d'utiliser un index pour les recherches rapides et certaines autres utilisations. Tout cela est interne au SGBD, une fois que le générateur de base de données a créé l'index ou déclaré la clé primaire.
Il est possible de créer des index qui n'ont rien à voir avec la clé primaire. Une clé primaire peut exister sans index, bien que ce soit généralement une très mauvaise idée.
merci, vous avez été très utile! Je me demandais cependant, est de définir une colonne comme un PK différent de la définition d'une colonne comme un entier unique que auto_increments? Fait-il autre chose sous le capot? – Mala
J'ai modifié pour répondre à votre question sur les inconvénients des index. Les clés primaires fonctionnent également comme des index, donc quand vous avez un PK sur une colonne, toutes les requêtes pour SELECT ou ORDER BY basées sur cet identifiant seront plus rapides. En outre, il serait garanti que chaque 'id' est unique, par conséquent vous n'aurez pas d'ID dupliqués comme vous pourriez l'être si vous n'avez qu'une colonne INT que vous mettez à jour. –
Une clé primaire n'a pas besoin d'être numérique ou d'un seul champ. et la colonne IDENTITY correspondrait mieux à cette description. Au lieu de cela, une clé primaire indique au SGBDR que les champs spécifiés peuvent identifier de façon unique une seule ligne dans la table. Essentiellement un INDEX UNIQUE. Il est normal (mais non obligatoire) que les clés primaires soient également le facteur déterminant dans l'ordre de stockage des données (clé primaire en cluster dans SQLServer) et améliorent ainsi considérablement le temps nécessaire pour trouver des lignes de données (lecture, écriture, etc.) – MatBailie