web-dev-qa-db-fra.com

Quelle est la différence b/w clé primaire et clé unique

J'ai essayé de le trouver dans Google mais la réponse n'est pas satisfaisante. Quelqu'un peut-il expliquer la différence solide. 

en fait, si la clé primaire est utilisée pour sélectionner des données de manière unique, alors quel est le besoin d'une clé unique? 

Quand dois-je utiliser une clé primaire et quand utiliser une clé unique?

24
nectar

Les clés primaire et unique sont utilisées pour différentes choses. Comprendre à quoi elles servent vous aidera à décider quand les utiliser.

La clé primaire est utilisée pour identifier une ligne de données dans une table. Il est utilisé chaque fois que vous devez vous référer à une ligne particulière, par exemple. dans d'autres tables ou par code d'application, etc. Pour identifier une ligne, les valeurs d'une clé PK doivent être uniques. De plus, ils ne peuvent pas être null, car la plupart des dbms considèrent que null est différent de null (puisque null signifie généralement "inconnu"). Une table ne peut avoir qu'un seul PK. Toutes les tables de votre base de données doivent avoir un PK (bien que cela ne soit pas imposé par la plupart des dbms), et le PK peut s'étendre sur plusieurs colonnes.

Des contraintes de clé uniques sont utilisées pour garantir que les données ne sont pas dupliquées sur deux lignes de la base de données. Une ligne de la base de données est autorisée à avoir la valeur null pour la valeur de la contrainte de clé unique. Bien qu'une table doive avoir une PK, elle n'a pas besoin de clés uniques supplémentaires. Cependant, les tables peuvent avoir plusieurs clés uniques si cela répond à vos besoins. À l'instar des PC, les clés uniques peuvent couvrir plusieurs colonnes.

Il est également intéressant de savoir que, par défaut, de nombreux tableaux d’index et de commandes physiques sur disque utilisent le PK. Cela signifie que la recherche de valeurs par leur PK est plus rapide que l'utilisation d'autres valeurs dans une ligne. Toutefois, vous pouvez généralement remplacer ce comportement si nécessaire.

33
Kramii

Le terme "clé unique" est à la fois ambigu et tautologique. Dans le modèle relationnel, une "clé" signifie une clé candidate, qui par définition est unique de toute façon. Une clé primaire est n'importe laquelle des clés candidates d'une relation. Par conséquent, "clé unique" signifie exactement la même chose que "clé candidate", ce qui signifie exactement la même chose que "clé primaire". Il n'y a pas de différence.

Cependant, SQL a quelque chose appelé une contrainte UNIQUE qui est légèrement différente d'une contrainte SQL PRIMARY KEY - les deux appliquent l'unicité mais PRIMARY KEY ne peut être utilisé qu'une fois par table. Les contraintes UNIQUE autorisent également les valeurs NULL, contrairement aux contraintes PRIMARY KEY.

Ainsi, le terme "clé unique", potentiellement déroutant, est le plus souvent utilisé pour désigner une clé imposée par une contrainte UNIQUE. Cela pourrait même être utilisé pour désigner une contrainte UNIQUE sur les colonnes nullable, bien que ce soit une utilisation très douteuse du terme à mon avis, car un ensemble de colonnes incluant des valeurs NULL ne peut pas être une clé candidate, aussi l'utilisation de la "clé" pour Null colonnes n'est pas vraiment correct et est sujet à confusion.

11
nvogel

Avant de discuter de la différence entre la clé primaire et la clé unique, il est important de déterminer quelle est la clé, son rôle dans les activités commerciales et son implémentation dans SQL/Oracle, etc.

Selon les perspectives commerciales: Pour une organisation ou une entreprise, il existe de nombreuses entités physiques (telles que des personnes, des ressources, des machines, etc.) et des entités virtuelles (leurs tâches, transactions, activités). En règle générale, les entreprises ont besoin d’enregistrer et de traiter les informations relatives à ces entités. Ces entités commerciales sont identifiées dans l'ensemble du domaine commercial par une clé. 

Selon le SGBDR prospectif: Clé (clé candidate), valeur ou ensemble de valeurs identifiant de manière unique une entité. Pour une table de bases de données, il y a tellement de clés existantes qui pourraient être éligibles pour la clé primaire. Ainsi, toutes les clés, clés primaires, clés uniques, etc. sont collectivement appelées clés candidates.

Pour une table, la clé candidate sélectionnée par DBA est appelée clé primaire, les autres clés candidates sont appelées clés secondaires. 

Différence entre la clé primaire et la clé unique

1. Comportement: La clé primaire est utilisée pour identifier une ligne (enregistrement) dans une table, tandis que Unique-key permet d'éviter les doublons dans une colonne.

2. Indexation: Par défaut, Sql-engine crée un index clusterisé sur une clé primaire s'il n'existe pas et un index non clusterisé sur une clé unique.

3. Nullabilité: La clé primaire n'inclut pas les valeurs Null alors que Unique-key le peut.

4. Existence: Une table peut avoir au plus une clé primaire mais peut avoir plusieurs clés uniques.

5. Modifiabilité: Vous ne pouvez pas modifier ni supprimer les valeurs primaires, mais les valeurs à clé unique le peuvent.

Pour plus d'informations avec des exemples: http://dotnetauthorities.blogspot.in/2013/11/Microsoft-SQL-Server-Training-Online-Learning-Classes-Integrity-Constraints-PrimaryKey-Uniform-Key_27. html

8

Une clé primaire est une clé unique. Les deux types de clé servent à identifier de manière unique une seule ligne dans une table. De nombreux SGBDR exigent qu'une des clés uniques d'une table soit désignée comme "clé primaire", pour plusieurs raisons de mise en œuvre. En termes d'intégrité des données, il n'y a pas de différence.

4
Christian Hayter

Une clé primaire n'autorise pas les valeurs NULL, une clé unique autorise une valeur NULL (sur un serveur SQL et plusieurs valeurs NULL sur Oracle) .__

utiliser des clés primaires lorsque vous souhaitez configurer des relations de clé étrangère

Voici un petit exemple avec une seule colonne dans chaque tableau

--primary key table
CREATE TABLE PrimaryTest (id INT PRIMARY KEY NOT NULL)
GO

-- foreign key table
CREATE TABLE ForeignTest (Pkid INT NOT NULL)
GO


--relationship
ALTER TABLE dbo.ForeignTest ADD CONSTRAINT
    FK_ForeignTest_PrimaryTest FOREIGN KEY
    (
    Pkid
    ) REFERENCES dbo.PrimaryTest
    (
    id
    ) ON UPDATE  NO ACTION 
     ON DELETE  NO ACTION 

GO

insérer une ligne dans la table de clé primaire

insert PrimaryTest values(1)

insérer une ligne dans la table de clé étrangère avec une valeur existante dans la table de clé primaire

insert ForeignTest values(1)

Maintenant, cela va échouer car la valeur 2 n'existe pas dans la table de clé primaire

insert ForeignTest values(2)

Msg 547, niveau 16, état 0, ligne 1 L'instruction INSERT était en conflit avec la contrainte FOREIGN KEY "FK_ForeignTest_PrimaryTest". Le conflit s'est produit dans la base de données "aspnetdb", table "dbo.PrimaryTest", colonne "id" . L'instruction a été terminée.

4
SQLMenace

Juste pour ajouter un autre exemple:

Pensez à une table contenant des données utilisateur, où chaque utilisateur a une adresse électronique. Deux utilisateurs ne peuvent pas avoir la même adresse électronique. Cette colonne devient une clé unique. Bien qu'il puisse s'agir de la clé primaire (je n'ai jamais fait d'une chaîne une clé primaire), ce n'est pas obligatoire.

2
Quentamia

Les deux représentent une identification unique pour une ligne dans une table, mais il y a une petite différence, c'est que 

La clé PRIMARY n'autorise pas les valeurs NULL

tandis que 

La clé UNIQUE n'autorise qu'une seule valeur NULL.

c'est la principale différence ..

2
jaideep

NOT NULL signifie qu'aucune entrée de cette colonne ne doit être nulle . UNIQUE signifie que chaque entrée de la colonne doit être distincte . PRIMARY KEY signifie que toute entrée de la colonne doit être distincte et non nulle.

Si simplement ..

  PRIMARY KEY= UNIQUE + NOT NULL
1
Siddappa Walake

Contrainte de clé primaire
1. Une clé primaire ne peut pas permettre null.
2. Plusieurs clés primaires ne sont PAS autorisées.
3. Sur certains SGBDR, une clé primaire génère un index en cluster par défaut.

Contrainte unique
1. Une contrainte unique peut être définie sur les colonnes autorisant les valeurs NULL.
2. Plusieurs clés uniques sont autorisées.
3. Sur certains SGBDR, une clé unique génère par défaut un index non cluster.

Source Wikipedia

1
A-patel-guy

vous pouvez avoir plusieurs contraintes UNIQUE par table, mais une seule contrainte PRIMARY KEY par table. Plus d'informations peuvent être trouvées ici

0
Brian Kenya