2010-01-13 3 views
1

Voici ma question: pourquoi devrais-je utiliser des champs auto-incrémentaux comme clés primaires sur mes tables au lieu de quelque chose comme des valeurs UUID?Conception de la base de données: pourquoi utiliser un champ auto-incrémental comme clé primaire?

Quels sont les principaux avantages de l'un par rapport à l'autre? Quels sont les problèmes et les points forts d'eux?

+0

Duplicata de http://stackoverflow.com/questions/230351/what-should-i-consider-when-selecting-a-data-type-for-my-primary-key – RedFilter

+0

Les questions @OrbMan sont différentes, là Il n'y a pas de duplication ici. –

Répondre

3

Je suppose que par UUID vous voulez dire comme un GUID? Les GUID sont meilleurs quand vous devrez plus tard fusionner des tables. Par exemple, si vous avez des bases de données locales réparties dans le monde entier, elles peuvent chacune générer des GUID uniques pour les identificateurs de ligne. Plus tard, les données peuvent être combinées en une seule base de données et les identifiants ne devraient pas entrer en conflit. Avec un auto-incrément dans ce cas, vous devez avoir une clé composite où l'autre moitié de la clé identifie l'emplacement d'origine, ou vous devez modifier les ID lorsque vous avez importé des données dans la base de données master.

+1

c'est un bon point * pro * GUID - mais assurez-vous simplement dans SQL Server d'utiliser le GUID comme clé primaire, mais pas ** comme clé de clustering. –

8

Les nombres simples consomment moins d'espace. Les valeurs UUID consomment 128 bits chacun. Travailler avec des nombres est aussi plus simple. Dans la plupart des cas, les entiers 32 bits ou 64 bits peuvent être utilisés comme serveur principal en tant que clé primaire. 2 est un très grand nombre. Consommer moins d'espace ne permet pas seulement d'économiser de l'espace disque, ce qui signifie des sauvegardes plus rapides, de meilleures performances dans les jointures et une plus grande quantité de données réelles mises en cache dans la mémoire du serveur de base de données.

4

Vous n'avez pas besoin d'utiliser des clés primaires auto-incrémentées, mais c'est le cas. Voici pourquoi. Tout d'abord, si vous utilisez int, ils sont plus petits que les UUID. Deuxièmement, il est beaucoup plus facile d'interroger en utilisant ints que UUIDs, surtout si vos clés primaires apparaissent comme des clés étrangères dans d'autres tables.

En outre, considérez le code que vous allez écrire dans n'importe quelle couche d'accès aux données. Beaucoup de mes constructeurs prennent un seul ID comme int. C'est propre, et dans un langage sûr comme le type C# - tous les problèmes sont pris au moment de la compilation.

Inconvénients des autoincrementers? Potentiellement à court d'espace. J'ai une table qui est à 200M sur son champ d'identification pour le moment. Ça va éclater la limite de 2 milliards en un an si je pars tel quel.

Vous pourriez également soutenir qu'un ID auto-incrémenté n'a aucune signification intrinsèque, mais il en va de même pour un UUID.

+0

@Paul - D'accord avec tout ce que vous avez dit. Et, lorsque vous approchez 2B, vous pouvez changer le type de données à BigInt. –

+0

@Randy Heureusement, la table en question contient des valeurs transitoires qui sont réinitialisées tous les jours, donc je vais faire un bon travail hebdomadaire qui réapparaît dans le champ d'identité. –

Questions connexes