web-dev-qa-db-fra.com

Clé primaire sous forme de texte

Dans le cours sur les bases de données que j'ai suivi pendant mes études (il y a environ 4 ans), j'ai pensé qu'il était recommandé d'éviter d'utiliser les chaînes de caractères comme primaire type de données de la clé.

Quelqu'un peut-il me dire quels sont les avantages et les inconvénients de choisir un type de données variant pour la clé primaire dans SQL et dans quelle mesure la prémisse ci-dessus est vrai?

N.B .: (J'utilise la base de données PostgreSQL ). Je suis également confronté à une situation où vous devez référencer une telle table à partir d'une autre, mettant ainsi la clé étrangère sur caractère variant type de données. Veuillez également en tenir compte.

26
artaxerxe

Les avantages que vous avez à choisir un type de données de caractère comme champ de clé primaire sont que vous pouvez choisir les données qu'il peut afficher. Par exemple, vous pouvez avoir l'adresse e-mail comme champ clé pour une table d'utilisateurs. Le élimine le besoin d'une colonne supplémentaire. Un autre avantage est que si vous avez une table de données commune qui contient des index de plusieurs autres tables (pensez à une table NOTES avec une référence externe aux tables FINANCE, CONTACT et ADMIN), vous pouvez facilement savoir de quelle table elle provient (par exemple votre table FINANCE a un index de F00001, la table CONTACT a un index de C00001, etc.). Je crains que les inconvénients ne soient plus importants dans cette réponse, car je suis contre une telle approche.

Les inconvénients sont les suivants:

  1. Le type de données série existe exactement pour cette raison dans PostgreSQL
  2. Les index numériques seront entrés dans l'ordre et une réindexation minimale devra être effectuée (c.-à-d. Si vous avez une table avec des clés Apple, Carrot et que vous souhaitez insérer Banana, la table devra se déplacer autour des index pour que Banana soit insérée au milieu Vous insérerez rarement des données au milieu d'un index si l'index est numérique).
  3. Les index numériques non liés aux données ne changeront pas.
  4. Les index numériques sont plus courts et leur longueur peut être fixe (4 octets par rapport à ce que vous choisissez comme longueur de varchar).

Dans votre cas, vous pouvez toujours mettre une clé étrangère sur un index numérique, donc je ne sais pas pourquoi vous voudriez le forcer à être un type varchar. La recherche et le filtrage sur un champ numérique sont théoriquement plus rapides qu'un champ de texte car le serveur sera obligé de convertir les données en premier. De manière générale, vous auriez une clé primaire numérique qui n'est pas en cluster, puis créer une clé en cluster sur votre colonne de données que vous allez beaucoup filtrer.

Ce sont des normes générales lors de l'écriture de SQL, mais en ce qui concerne l'analyse comparative, vous constaterez seulement que les colonnes varchar sont un peu plus lentes à joindre et à filtrer que les colonnes entières. Tant que vos clés primaires ne changent JAMAIS, tout va bien.

17
DF_