2010-06-20 11 views

Répondre

3

Je ne sais pas si vous posez également des questions sur IDENTITY ou non, mais un GUID est un identifiant unique qui est (presque) garanti unique. Il peut être utilisé sur les clés primaires, mais n'est pas recommandé sauf si vous effectuez un travail hors connexion ou si vous envisagez de fusionner des bases de données.

Par exemple, un "normal", la clé primaire d'identité est

1 Jason 
2 Jake 
3 Mike 

qui lors de la fusion avec une autre base de données qui ressemble à

1 Lisa 
2 John 
3 Sam 

sera difficile. Vous devez retaper certaines colonnes, assurez-vous que vos sont en ordre FKs, etc. Utilisation GUIDs, les données ressemble à ceci, et il est facile de fusionner:

1FB74D3F-2C84-43A6-9FB6-0EFC7092F4CE Jason 
845D5184-6383-473F-A5D6-4DE98DBFBC39 Jake 
8F515331-4457-49D0-A9F5-5814EE7F50BA Mike  
CE789C89-E01F-4BCE-AC05-CBDF10419E78 Lisa 
4D51B568-107C-4B63-9F7F-24592704118F John 
7FA4ED64-7356-4013-A78A-C8CCAB329954 Sam 

Notez qu'un GUID prend beaucoup plus d'espace qu'un INT, et pour cette raison, il est recommandé d'utiliser un INT comme une clé primaire, sauf si vous en avez absolument besoin.

1

create table table (id int indentité (1,1) clé primaire, col1 varchar (10) )

crée automatiquement la clé primaire pour vous. Vérifiez GUID dans le T-SQL, ne l'avez pas à portée de main pour le moment.

+0

peut vous faire une colonne nommée « int »? De toute façon, je crois que vous vouliez dire 'id int indentity (1,1) clé primaire' –

+0

Oui, je voulais dire id int. Corrigé maintenant, merci. – Raj

5

Il y a 3 options

CREATE TABLE A 
(
ID INT IDENTITY(1,1) PRIMARY KEY, 
... Other Columns 
) 

CREATE TABLE B 
(
ID UNIQUEIDENTIFIER DEFAULT NEWID() PRIMARY KEY, 
... Other Columns 
) 

CREATE TABLE C 
(
ID UNIQUEIDENTIFIER DEFAULT NEWSEQUENTIALID() PRIMARY KEY, 
... Other Columns 
) 

Une raison pour laquelle vous pourriez préférer C plutôt que B serait de réduire la fragmentation si vous deviez utiliser l'ID as the clustered index.

1

Le problème avec l'utilisation de count, puis compter +1 comme clé, est que si vous deviez supprimer un enregistrement du milieu, vous finiriez avec une clé dupliquée générée. EG:

Key Data  
1  A   
2  B 
3  C 
4  D 

maintenant supprimer B (nombre devient 3), et insérer E. Cette tente de faire la nouvelle clé primaire 4, qui existe déjà.

Key Data  
1  A   
3  C 
4  D <--After delete count = 3 here 
4  E <--Attempted insert with key 4  

Vous pouvez utiliser la clé primaire et incrémentation automatique pour vous assurer que vous n'avez pas cette question

CREATE TABLE myTable 
(
    P_Id int NOT NULL AUTO_INCREMENT, 
    PRIMARY KEY (P_Id) 
) 

Ou vous pouvez utiliser GUID.Comment GUIDs travail est en créant un nombre entier de 128 bits (représenté comme 32 chaîne hexagonale char)

Key          Data 
24EC84E0-36AA-B489-0C7B-074837BCEA5D  A 
. 
. 

Il en résulte 2^128 valeurs possibles (reaaally grande), de sorte que les chances de valeurs similaires créées par un ordinateur est extrêmement petit. En outre, il existe des algorithmes pour aider à faire en sorte que cela ne se produise pas. Donc, GUID sont un très bon choix pour une clé aussi bien.

Quant à savoir si vous utilisez un entier ou un GUID, est généralement fonction de l'application, la politique, etc.