Quelle est la différence entre la clé primaire et la clé unique contrainte?

Quelle est la différence entre Primary key Et unique Key constraint?

Quel est le recours??

19
demandé sur Martin Smith 2010-09-29 13:13:33

6 réponses

les Deux sont utilisés pour désigner candidat touches pour une table.

Vous ne pouvez avoir qu'une seule clé primaire d'une table serait juste besoin de choisir un, si vous en avez plusieurs candidats.

L'un ou l'autre peut être utilisé dans les contraintes de clé étrangère. Dans SQL Server les colonnes de clés primaires ne peuvent pas être nulles. Les colonnes utilisées dans des contraintes Clés uniques peuvent l'être.

par défaut dans SQL Server la clé primaire deviendra l'index clustered si elle est créée sur un tas mais il il n'est nullement obligatoire que L'indice PK et l'indice clustered soient les mêmes.

12
répondu Martin Smith 2010-09-29 09:15:30

Une clé primaire est celui qui est utilisé pour identifier la ligne en question. Elle pourrait aussi avoir un sens au-delà de cela (s'il y avait déjà un morceau de données "réelles" qui pourrait servir) ou elle peut être purement un artefact de mise en œuvre (la plupart IDENTITY colonnes, et valeurs auto-incrémentées équivalentes sur d'autres systèmes de bases de données).

une clé unique est un cas plus général, où une clé ne peut pas avoir des valeurs répétées. Dans la plupart des cas, les personnes ne peuvent pas avoir les mêmes numéros de sécurité sociale par rapport à la même juridiction (une affaire internationale, pourraient différer). Par conséquent, si nous stockions les numéros de sécurité sociale, nous souhaiterions les modéliser comme étant uniques, car tout numéro correspondant à un numéro existant est clairement erroné. Les noms d'utilisateur doivent généralement être uniques aussi, donc voici un autre cas. Les identificateurs externes (identificateurs utilisés par un autre système, une autre norme ou un autre protocole) ont aussi tendance à être uniques, par exemple, il n'y a qu'une seule langue qui possède un code ISO 639 donné, donc si nous stockions les codes ISO 639, nous pourrions modèle unique.

Cette unicité peut également être sur plus d'une colonne. Par exemple, dans la plupart des systèmes de catégorisation hiérarchique (par exemple une structure de dossier) aucun élément ne peut avoir à la fois le même élément parent et le même nom, bien qu'il puisse y avoir d'autres éléments avec le même parent et des noms différents, et d'autres avec le même nom et des parents différents. Cette capacité à colonnes multiples est également présente sur les touches primaires.

Un tableau peut également avoir plus d'une clé unique. E. g. un utilisateur peut avoir à la fois un numéro d'identification et un nom d'utilisateur, et les deux doivent être uniques.

non nullable clé unique peut donc servir de clé primaire. Parfois, les clés primaires qui proviennent des données innées modélisées sont appelées "clés primaires naturelles", car elles constituent une partie "naturelle" des données, plutôt qu'un simple artefact de mise en œuvre. La décision dépend de plusieurs choses:

  1. Probabilité de changement de spécification. Si nous avons modélisé un numéro de sécurité sociale comme unique et que nous avons ensuite dû l'adapter pour permettre à plusieurs administrations d'utiliser un système de numérotation assez similaire pour permettre les collisions, nous avons probablement besoin de simplement supprimer la contrainte d'unicité (autres changements être nécessaires). Si c'était notre clé primaire, nous devons maintenant aussi utiliser une nouvelle clé primaire, et changer n'importe quelle table qui utilisait cette clé primaire dans le cadre d'une relation, et n'importe quelle requête qui a rejoint le il.

  2. vitesse de recherche. L'efficacité clé peut être importante, car ils sont utilisés dans de nombreux WHERE clauses et (plus souvent) dans beaucoup de JOIN s. Avec JOINS en particulier, la vitesse de recherche peut être vital. L'impact dépendra des détails de la mise en œuvre, et les différentes bases de données varient en fonction de la manière dont elles traiteront les différents types de données (j'aurais peu de scrupules du point de vue de la performance à utiliser un gros morceau de texte comme clé primaire dans Postgres où je pourrais spécifier l'utilisation de hachage joint, mais je serais très hésitant à le faire dans SQLServer [Edit: pour "large" je pense à peut-être la taille d'un nom d'Utilisateur, pas quelque chose de la taille de L'ensemble Scandinave Eddas!]).

  3. Fréquence de la clé étant la seule donnée intéressante. Par exemple, avec une table des langues, et une table des morceaux de commentaires dans cette langue, très souvent la seule raison pour laquelle je voudrais me joindre à la table des langues lorsque je traite de la table des commentaires est soit d'obtenir le code de langue ou pour restreindre une requête à ceux avec un code de langue particulier. D'autres informations sur la langue sont susceptibles d'être beaucoup plus rarement utilisées. Dans ce cas, en rejoignant sur le code est susceptible d'être moins efficace que de rejoindre sur un ensemble d'id numérique à partir d'un IDENTITY colonne, ayant le code comme clé primaire - et donc comme ce qui est stocké dans la colonne de clé étrangère sur la table de commentaires - supprimera le besoin de N'importe quelle jointure du tout, avec un gain d'efficacité considérable. Plus souvent cependant Je veux plus d'informations des tableaux pertinents que cela, donc rendre la jointure plus efficace est plus important.

7
répondu Jon Hanna 2010-09-29 11:03:22

touche primaire:

  1. la clé primaire n'est rien mais elle identifie de façon unique chaque ligne d'une table.

  2. la clé primaire ne permet pas les valeurs dupliquées, ni NULL.

  3. clé Primaire par défaut est un index cluster.

  4. Une table ne peut avoir qu'une seule clé primaire.

Touche Unique:

  1. la clé Unique est rien mais il identifie uniquement chaque ligne dans une table.

  2. la clé Unique ne permet pas les valeurs dupliquées, mais elle permet (au plus un) NULL.

  3. la clé Unique par défaut est un index non-clustered.

Ceci est un lien plein de fruits pour comprendre le Touche PrimaireBase De Données De Clés. Gardez à l'esprit que nous n'avons qu'un seul indice groupé dans une table [en parlant de SQL Server 2005]. Maintenant, si nous voulons ajouter une autre colonne unique ensuite, nous allons utiliser Clé Unique colonne, parce que Colonne clé Unique peut être ajouté plus d'un.

5
répondu Rais Hussain 2016-01-26 19:59:10

une clé primaire est n'importe quelle clé candidate. En principe les clés primaires ne sont pas différentes de n'importe quelle autre clé candidate parce que toutes les clés sont égales dans le modèle relationnel.

SQL a cependant deux syntaxes différentes pour implémenter les clés candidates: la contrainte de clé primaire et la contrainte UNIQUE (sur les colonnes non-nulles bien sûr). En pratique, ils atteignent exactement la même chose, sauf pour la restriction essentiellement inutile qu'une clé primaire ne peut être utilisée qu'une seule fois par table alors qu'une contrainte UNIQUE peut être utilisée plusieurs fois.

il n'y a donc pas d ' "utilisation" fondamentale de la contrainte principale. Elle est redondante et pourrait facilement être ignorée ou complètement abandonnée de la langue. Cependant, de nombreuses personnes trouvent commode de désigner une clé particulière par table comme ayant une signification particulière. Il existe une convention très largement observée selon laquelle les clés désignées avec la clé primaire sont utilisées pour les références de clé étrangère, bien que cela soit entièrement facultatif.

3
répondu sqlvogel 2010-09-29 21:37:51

version courte:

  • du point de vue de la théorie des bases de données, il n'y en a pas. Les deux sont simplement des clés de candidat.
  • dans la pratique, la plupart des DMBS aiment avoir une "clé standard", qui peut être utilisé pour décider par exemple comment stocker des données, et de dire outils et clients DB qui est la meilleure façon d'identifier un enregistrement.

donc, distinguer une clé unique de la "clé primaire" n'est qu'une commodité de mise en œuvre (mais importante).

1
répondu sleske 2010-09-29 11:06:51

la clé primaire et la clé unique sont toutes deux utilisées pour renforcer l'unicité d'une colonne. Ainsi, lorsque vous choisissez l'un sur l'autre?

Un tableau peut avoir seulement une clé primaire. Si vous voulez imposer l'unicité sur 2 colonnes ou plus, alors nous utilisons la contrainte clé unique.

différence entre la contrainte principale et la contrainte principale Unique?

1. Une table ne peut avoir qu'une seule clé primaire, mais plus d'un clé unique

2. la clé primaire ne permet pas les null, où comme la clé unique permet un nul

ALTER TABLE Table_Name
ADD CONSTRAINT Constraint_Name PRIMARY KEY (Column_Name)

Alter Table Table_Name
Add Constraint Constraint_Name Unique(Column_Name)
0
répondu Rae Lee 2015-10-28 06:01:02