2010-06-04 16 views
19

J'ai essayé de le trouver dans google mais pas de réponse satisfaisante est donnée là-bas. Quelqu'un peut-il expliquer la différence solide.Quelle est la différence b/w clé primaire et clé unique

effectivement si la clé primaire est utilisée pour sélectionner des données uniquement alors quel est le besoin de clé unique?

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

Répondre

29

La clé primaire et la clé unique sont utilisées pour différentes choses. Comprendre pourquoi elles sont destinées à vous aider à 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 avez besoin de se référer à une ligne particulière, par exemple. dans d'autres tables ou par code d'application etc. Afin d'identifier une ligne, les valeurs d'une PK doivent être uniques. De plus, ils ne peuvent pas être nuls, car la plupart des dbms traitent null comme n'étant pas égal à null (puisque null signifie généralement "unknown"). Une table ne peut avoir qu'un PK. Toutes les tables de votre base de données doivent avoir un PK (bien que cela ne soit pas appliqué par la plupart des dbms), et 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 dans la base de données. Une ligne de la base de données est autorisée à avoir une valeur nulle pour la valeur de la contrainte de clé unique. Bien qu'une table devrait avoir un PK, elle n'a pas besoin de clés uniques supplémentaires. Cependant, les tables peuvent avoir plus d'une clé unique si cela répond à vos besoins. Comme les PK, les clés uniques peuvent s'étendre sur plusieurs colonnes.

Il est également intéressant de savoir que, par défaut, de nombreux dbms indexent et ordonnent physiquement les tables sur le disque en utilisant le PK. Cela signifie que la recherche de valeurs par leur PK est plus rapide que l'utilisation d'autres valeurs dans une rangée. En règle générale, vous pouvez cependant remplacer ce comportement si nécessaire.

+2

que voulez-vous dire par «PK peut couvrir plusieurs colonnes.»? – nectar

+4

Dans de nombreux exemples, vous voyez que la clé primaire est une colonne unique dans le tableau; souvent un nombre entier d'identification qui identifie de façon unique la ligne (ceci s'appelle une colonne d'identité). C'est bien (et souvent pratique), mais le PK n'a * pas * à être une seule colonne. – Kramii

+3

Par exemple, vous pourriez avoir une table de produits. Supposons que chaque produit existe en plusieurs modèles et plusieurs couleurs. La table Products possède donc une colonne ModelNum et une colonne Color. Maintenant, ni la colonne ModelNum ni la colonne Color identifie de façon unique un produit, mais ensemble, ils le font. Dans ce cas, vous pouvez définir une clé primaire qui inclut à la fois les colonnes ModelNum et Color (c'est ce qu'on appelle une "clé primaire composite"). Bien sûr, il y a des avantages et des inconvénients de la colonne d'identité PK par rapport à l'approche PK de la colonne composite ... mais c'est une autre question. – Kramii

4

Une clé primaire ne permet pas les valeurs NULL, une clé unique permettra un nul (sur le serveur SQL et plusieurs nulls sur Oracle) Une table ne peut avoir qu'une seule clé primaire, mais beaucoup de clés uniques

utiliser les clés primaires lorsque vous voulez établir des relations clés étrangères

Voici un petit exemple avec une seule colonne dans chaque table

--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 qui existe dans la table de clé primaire

insert ForeignTest values(1) 

Maintenant, cela échouera parce que 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". La déclaration a été terminée.

+1

peut vous donner un petit exemple, comment puis-je utiliser clé unique pour établir des relations clés étrangères – nectar

+1

cet exemple est tout au sujet des clés étrangères que je demandais au sujet des clés uniques. – nectar

+0

La revendication "* une clé unique autorisera null *" dépend du SGBD utilisé. Certains autorisent plusieurs valeurs nulles (Postgres, MySQL, Firebird), d'autres non (Oracle, DB2, SQL Server) –

4

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 que l'une des clés uniques d'une table soit désignée comme «clé primaire», pour plusieurs raisons de mise en œuvre différentes. En termes d'intégrité des données, il n'y a pas de différence.

+0

une clé unique permettra au moins un nul où un PK ne sera pas – SQLMenace

10

Le terme "clé unique" est à la fois ambigu et tautologue. 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" 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 subtilement différente d'une contrainte SQL PRIMARY KEY - les deux imposent l'unicité, mais PRIMARY KEY ne peut être utilisé qu'une seule fois par table. Les contraintes UNIQUES autorisent également les valeurs NULL, contrairement aux contraintes PRIMARY KEY. Par conséquent, le terme "clé unique" potentiellement confus est le plus souvent utilisé pour désigner une clé imposée par une contrainte UNIQUE. Il pourrait même être utilisé pour signifier une contrainte UNIQUE sur les colonnes NULL, bien que ce soit une utilisation très douteuse du terme car un ensemble de colonnes qui incluent des NULL ne peut pas être une clé candidate, donc l'utilisation du mot "clé" les colonnes ne sont pas vraiment correctes et ne peuvent que créer de la confusion.

+0

* "clé unique" signifie exactement la même chose que "clé candidate" qui signifie exactement la même chose que "clé primaire". Il n'y a pas de différence. "* - C'est incorrect, comme vous l'expliquez clairement dans le reste de votre réponse – Yarin

+1

Ce que j'explique ici, c'est que malheureusement le terme" clé unique "est parfois * mal utilisé * pour décrire quelque chose qui n'est pas unique et pas Je pense qu'il devrait être évident qu'il s'agit d'une * mauvaise utilisation * de ces deux mots et que le seul sens correct de l'expression «clé unique» est de décrire quelque chose qui EST unique et qui est une clé. "clé unique" est la même que la clé primaire et la clé candidate – sqlvogel

2

Juste pour ajouter un autre exemple:

une table Pensez contenant des données utilisateur, chaque utilisateur dispose d'une adresse e-mail. Deux utilisateurs ne peuvent pas avoir la même adresse électronique, de sorte que la colonne devient une clé unique. Bien qu'il puisse s'agir de la clé primaire (je n'ai jamais fait de chaîne une clé primaire), ce n'est pas forcément le cas.

+0

Merci pour avoir donné l'exemple d'une table d'utilisateur.J'étais à la recherche de cette réponse.Explication avec un exemple devient plus facile à imaginer et à comprendre –

1

Les deux représentent une identification unique à une ligne dans une table mais il y a peu de différence de bits est que

clé primaire n'autorise les valeurs NULL

tout

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

qui est la principale différence ..

+0

La revendication "* UNIQUE key ne permet qu'une seule valeur NULL * "dépend du SGBD utilisé Certaines autorisent plusieurs valeurs nulles (Postgres, MySQL, Firebird), d'autres pas (Oracle, DB2, SQL Server) –

8

Avant de discuter sur la différence entre la clé primaire et clé unique, il est important de déterminer ce qui est la clé, la façon dont il joue un rôle dans les affaires et la façon dont il est mis en œuvre SQL/Oracle

Selon la prospective: Pour une organisation ou une entreprise, il y a tant d'entités physiques (telles que des personnes, des ressources, des machines, etc.) et des entités virtuelles (leurs tâches, transactions, activités) . Habituellement, les entreprises ont besoin d'enregistrer et de traiter les informations pour ces entités commerciales. Ces entités commerciales sont identifiées dans le domaine métier entier par une clé.

Selon le SGBDR prospectif: Clé (c.-à-d. Une clé candidate), une valeur ou un ensemble de valeurs qui identifie de façon unique une entité. Pour une table de base de données, il existe tellement de clés qui peuvent être admissibles à la clé primaire. Pour que toutes les clés, la clé primaire, la clé unique, etc. soient appelées collectivement Clé de candidat.

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

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

1.Comportement: La clé primaire est utilisée pour identifier une ligne (enregistrement) dans une table alors que la clé unique est pour empêcher les valeurs en double dans une colonne.

2. Indexation: Par défaut, Sql-engine crée un index clusterisé sur la 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 la clé Unique peut l'être.

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

5. Modifabilité: Vous ne pouvez pas modifier ou supprimer des valeurs primaires mais les valeurs de clé unique peuvent.

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

+0

" * Par défaut Sq l-engine crée un index clusterisé sur la clé primaire * "dépend du SGBD utilisé. Tous les SGBD n'ont pas quelque chose comme un «index clusterisé» et ne les utilisent pas tous par défaut. –

0

vous pouvez avoir de nombreuses contraintes uniques par table, mais une seule contrainte de clé primaire par table. Plus d'informations peuvent être trouvées here

-1

Une clé unique sera servie avec une autre clé alors qu'une clé primaire n'en servira aucune autre clé. La clé primaire est utilisée sans aucune association avec une autre clé.

+0

Pouvez-vous expliquer cela un peu mieux? Qu'entendez-vous par "servi avec", exactement? –

1

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

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

Source Wikipédia

0

NOT NULL toute entrée dans cette colonne particulière ne doit pas être nulle. UNIQUE signifie Chaque entrée de la colonne doit être distincte. PRIMARY KEY signifie que toute entrée dans la colonne doit être distincte et non nulle.

donc simplement ..

PRIMARY KEY= UNIQUE + NOT NULL