web-dev-qa-db-fra.com

Quelle est la différence entre une clé primaire et une identité?

Dans une base de données SQL Server, quelle est la différence entre une colonne de clé primaire et une colonne d'identité? Une colonne peut être une clé primaire sans être une identité. Une colonne ne peut toutefois pas être une identité sans être une clé primaire. 

Outre les différences, qu'est-ce qu'une colonne PK et Identity offre par rapport à une colonne PK?

edit: Oups. Comme indiqué ci-dessous et maintenant vérifié par moi, une colonne peut être une identité sans être une PK. Lorsque j'ai testé cela, mon type de colonne était une chaîne et j'étais incapable de lui attribuer une identité. Logique.

57
DenaliHardtail

Une colonne peut certainement être une identité sans être une PK.

Une identité est simplement une colonne à croissance automatique. 

Une clé primaire est la ou les colonnes uniques qui définissent la ligne. 

Ces deux éléments sont souvent utilisés ensemble, mais rien n’exige qu’il en soit ainsi.

74
Joe

Cette réponse relève davantage de l'identité WHY et de la clé primay que de ce qu'ils sont depuis que Joe a répondu correctement à WHOT ci-dessus.

Une identité est une valeur que vous contrôlez SQL. L'identité est une fonction de la ligne. Il est séquentiel, avec une valeur croissante ou décroissante, du moins dans SQL Server. Il ne doit jamais être modifié et les écarts de valeur doivent être ignorés. Les valeurs d'identité sont très utiles pour lier la table B à la table A car la valeur n'est jamais dupliquée. L'identité n'est pas le meilleur choix pour un index clusterisé dans tous les cas. Si une table contient des données d'audit, il est peut-être préférable de créer l'index clusterisé à la date indiquée, car il présentera la réponse à la question "Que s'est-il passé entre aujourd'hui et il y a quatre jours" avec moins de travail, car les enregistrements pour les dates sont séquentiels dans l'ordre chronologique? pages de données.

Une clé primaire rend la colonne ou les colonnes d'une ligne uniques. Primay key est une fonction de colonne. Une seule clé primaire peut être définie sur une table, mais plusieurs index uniques peuvent être créés pour simuler la clé primaire. La mise en cluster de la clé primaire n'est pas toujours le bon choix. Considérons un annuaire téléphonique. Si l'annuaire est groupé par la clé principale (numéro de téléphone), la requête pour renvoyer les numéros de téléphone sur "First Street" sera très coûteuse.

Les règles générales que je suis pour l'identité et la clé primaire sont les suivantes:

  1. Toujours utiliser une colonne d'identité
  2. Créer l'index en cluster sur la ou les colonnes utilisées dans les recherches d'intervalle
  3. Maintenez l'index en cluster étroit, car l'index en cluster est ajouté à la fin de chaque autre index.
  4. Créer une clé primaire et des index uniques pour rejeter les valeurs en double 
  5. Les touches étroites sont meilleures
  6. Créer un index pour chaque colonne ou toutes les colonnes utilisées dans les jointures

Ce sont mes règles générales.

11
RC_Cleland

Une clé primaire (également appelée clé candidate) est un ensemble d'attributs possédant les propriétés d'unicité et de minimalité. Cela signifie que la ou les colonnes de clé doivent obligatoirement être uniques. En d'autres termes, le SGBD n'autorisera pas deux lignes à avoir le même ensemble de valeurs pour ces attributs.

La propriété IDENTITY crée effectivement une valeur par défaut auto-incrémentée pour une colonne. Cette colonne ne doit pas nécessairement être unique, donc une colonne IDENTITY n'est pas nécessairement une clé.

Cependant, une colonne IDENTITY est généralement conçue pour être utilisée comme clé. Par conséquent, elle est généralement soumise à une contrainte d'unicité afin de garantir que les doublons ne sont pas autorisés.

8
nvogel

EDITS FABRIQUÉS À PARTIR DE FEEDBACK

Une clé est unique à une ligne. C'est une façon d'identifier une ligne. Les lignes peuvent avoir aucune, une ou plusieurs clés. Ces clés peuvent consister en une ou plusieurs colonnes.

Les clés sont des index avec une contrainte unique. Cela les différencie des index non clés.

Tout index à plusieurs colonnes est appelé "index composite".

Traditionnellement, une clé primaire est considérée comme la clé principale qui identifie de manière unique une ligne. Il ne peut y en avoir qu’un seul.

Selon la conception de la table, il est possible que la clé primaire ne soit pas utilisée.

Une clé primaire n’est que cela - une "clé principale". C'est le principal qui spécifie l'identité unique d'une ligne. Selon la conception de la table, cela peut être un terme impropre et plusieurs clés expriment l'unicité.

Dans SQL Server, une clé primaire peut être mise en cluster. Cela signifie que les colonnes restantes sont attachées à cette clé au niveau feuille de l'index. En d'autres termes, une fois que SQL Server a trouvé la clé, il a également trouvé la ligne (pour être clair, cela est dû à l'aspect clustered).

Une colonne d'identité est simplement une méthode permettant de générer un ID unique pour une ligne.

Ces deux sont souvent utilisés ensemble, mais ce n'est pas une obligation.

1
IamIC

Vous pouvez utiliser IDENTITY non seulement avec des nombres entiers, mais aussi avec tout type de données numérique ayant une échelle de 0.

clé primaire pourrait avoir l'échelle mais ce n'est pas nécessaire.

IDENTITY, associé à une contrainte PRIMARY KEY ou UNIQUE, vous permet de fournir un identificateur de ligne unique et simple.

0
Nikki

Clé primaire mettant l'accent sur l'unicité et évitant les doublons pour tous les enregistrements de la même colonne, alors que identity fournit des nombres croissants dans une colonne sans insérer de données Les deux caractéristiques peuvent être sur une seule colonne ou sur une différence.

0
Shaahin