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.
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:
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.