web-dev-qa-db-fra.com

Une table peut-elle avoir plusieurs clés primaires?

Je suis très confus en ce moment, peut-être pouvez-vous m'aider à mieux comprendre le problème concernant la question qu'une table peut avoir deux clés primaires si oui alors comment? et non alors pourquoi?

17
Pankaj Kumar

Vous demandez si vous pouvez avoir plus d'un champ de clé primaire et vous le pouvez très certainement. Vous ne pouvez avoir qu'une seule clé primaire, mais celle-ci peut comprendre autant de colonnes que nécessaire pour identifier de manière unique vos lignes.

Utilisez quelque chose comme ceci lorsque vous créez votre table:

CONSTRAINT pk_PersonID PRIMARY KEY (P_Id,LastName) 

P_Td et LastName sont des colonnes de votre table.

Si vous pensez que vous voulez plus d'une clé primaire, la réponse est "pas vraiment". Vous ne pouvez avoir qu'une seule clé primaire. Cependant, vous pouvez avoir autant d'index que vous le souhaitez qui ont une contrainte unique sur eux. Un index unique fait à peu près la même chose qu'une clé primaire.

par exemple :-

CREATE TABLE Persons
(
   P_Id int NOT NULL,
   LastName varchar(255) NOT NULL,
   FirstName varchar(255),
   Address varchar(255),
   City varchar(255),
   CONSTRAINT pk_PersonID PRIMARY KEY (P_Id,LastName)
)

Remarque: Dans l'exemple ci-dessus, il n'y a qu'une seule clé primaire (pk_PersonID). Cependant, la valeur de pk_PersonID est composé de deux colonnes (P_Id et LastName).

28
Diwakar

Non Vous ne pouvez pas avoir deux clés primaires dans une table, mais vous pouvez avoir une clé primaire composite

Parce que la clé primaire est une identité sur la ligne et qu'il ne peut pas y avoir deux ID sur une ligne.

14
zzlalani

Une table peut avoir plusieurs clés mais, par convention, une seule clé par table est désignée comme "principale". En règle générale, il peut s'agir de la clé considérée comme l'identifiant "préféré" pour les informations de ce tableau ou il peut s'agir d'une clé choisie à d'autres fins spécifiques par le concepteur du tableau.

En principe, quelle que soit la fonction ou la propriété que vous associez à la clé désignée "principale", elle pourrait tout aussi bien être associée à toute autre clé. Par conséquent, à de nombreuses fins pratiques, vous pouvez désigner plusieurs clés "primaires" si vous le souhaitez, mais uniquement si les limitations d'un SGBD particulier le permettent.

Dans le modèle relationnel des données, toutes les clés sont égales et aucune fonction spéciale n'est attribuée aux clés primaires (en fait, l'utilisation relationnelle du terme clé primaire désignée à l'origine tout et toutes clés d'une relation et pas seulement une clé). Malheureusement, de nombreux SGBD ne respectent pas ce principe et peuvent limiter certaines fonctionnalités à une et une seule clé d'une table, ce qui oblige à être sélectif sur la clé qui sera désignée comme principale. La réponse à votre question devrait donc être OUI en principe. Lorsque vous devez y parvenir dans un SGBD SQL particulier, la réponse réelle est: cela dépend.

4
nvogel

Vous ne pouvez avoir qu'une seule clé primaire - la plage de clés qui pourraient toutes potentiellement être la clé primaire peut être appelée clé candidate. Celui que vous sélectionnez est la clé primaire, les autres clés alternatives peuvent être implémentées en tant que contraintes/index uniques.

Ainsi, bien qu'il n'y ait qu'une seule clé primaire, vous pouvez toujours garantir la primauté des autres champs/combinaison de champs à l'aide de la contrainte/index unique.

3
Andrew

Non, la table ne contient que la clé primaire. Mais cette clé primaire peut contenir plusieurs champs. Signifie que lorsque vous créez une table et lorsque vous mentionnez la clé primaire, vous pouvez ajouter plus d'une colonne que vous souhaitez. par exemple

CREATE TABLE nom_table (type de données col1, type de données col2, type de données col3, type de données col4, CLÉ PRIMAIRE (col1, col2, col3))

De cette façon, vous pouvez ajouter une clé primaire dans une table unique

3
Bha15

Sur une table, vous pouvez faire indexes, qui permettent au moteur de base de données interne de traiter le contenu des colonnes affectées (1 à plusieurs) pour une recherche facile. Étant donné qu'à ce stade, le moteur évalue et trie déjà le contenu des champs, il peut également facilement garantir l'unicité des valeurs. Ainsi, un index peut s'étendre de 1 à plusieurs lignes, et peut également être unique.

Un clé primaire est un marqueur théoriquement facultatif, bien qu'en pratique obligatoire, sur un index spécifique, c'est la façon éternellement unique de référencer une ligne spécifique dans le tableau. Il s'agit généralement d'un GUID ou d'un entier à incrémentation automatique (identity dans SQL Server). La clé primaire elle-même est unique pour une table donnée et applique une contrainte unique par définition , mais peut éventuellement s'étendre sur plusieurs lignes (un indexé/clé ).

Vous pouvez par exemple avoir une table de jonction contenant seulement 2 champs, qui sont tous deux des clés étrangères, et forment ensemble la clé/index primaire de la table.

1
Niels Keurentjes

CREATE TABLE track (col1 numérique (10), col2 numérique (10), col3 numérique (10), col4 numérique (10), PRIMARY KEY (col1, col2, col3))

0
harish

Comme vous ne pouvez pas définir plus d'une colonne comme clé primaire comme ci-dessous

create table test1 (col1 numeric(10) primary key, col2 numeric(10) primary key 
,col3 numeric(10) primary key, col4 numeric(10)) 

Il doit s'agir d'une clé composite. Oui, nous pouvons avoir plus d'une colonne comme clé primaire pour résoudre certaines exigences commerciales. Les clés primaires garantissent que les colonnes n'auront pas de valeurs en double, Null dans le tableau.

Ci-dessous se trouve le SQL pour créer une table avec la clé primaire composite

CREATE TABLE track( 
col1 numeric(10) , col2 numeric(10) ,col3 numeric(10) primary key, col4 numeric(10), 
PRIMARY KEY (col1,col2,col3) 
)
0
Nagaraj S

Vous pouvez essayer FOREIGN KEY est un champ (ou une collection de champs) dans une table qui fait référence à la PRIMARY KEY dans une autre table.

0
Arm Avi

Non. Vous ne pouvez pas utiliser plus d'une clé primaire dans la table. Pour cela, vous avez une clé composite qui est une combinaison de plusieurs champs.

0
Vaibhav Parmar