Les tables de recherche (ou tables de code , comme certains les appellent) sont généralement une collection des valeurs possibles qui peuvent être données pour une certaine colonne.
Par exemple, supposons que nous ayons une table de recherche appelée party
(destinée à stocker des informations sur les partis politiques) qui comporte deux colonnes:
party_code_idn
, qui contient des valeurs numériques générées par le système et (manquant de sens dans le domaine métier ) fonctionne comme substitut de la clé réelle.party_code
, est la clé réelle ou «naturelle» de la table car elle conserve des valeurs qui ont des connotations de domaine métier .
Et disons que ce tableau conserve les données qui suivent:
+----------------+------------+
| party_code_idn | party_code |
+----------------+------------+
| 1 | Republican |
| 2 | Democratic |
+----------------+------------+
La party_code
colonne, qui conserve les valeurs «Républicain» et «Démocratique», étant la véritable clé de la table, est configurée avec une contrainte UNIQUE, mais j'ai facultativement ajouté la party_code_idn
et l'ai définie comme PK de la table (bien que, logiquement parlant , party_code
peut fonctionner en tant que CLÉ PRIMAIRE [PK]).
Question
Quelles sont les meilleures pratiques pour pointer vers des valeurs de recherche à partir de tables de transactions ? Dois-je établir des références de CLÉ ÉTRANGÈRE (FK) soit (a) directement à la valeur naturelle et significative ou (b) à des valeurs de substitution?
L' option (a) , par exemple,
+---------------+------------+---------+
| candidate_idn | party_code | city |
+---------------+------------+---------+
| 1 | Democratic | Alaska |
| 2 | Republican | Memphis |
+---------------+------------+---------+
a les propriétés suivantes 1 :
- Lisible pour l'utilisateur final (+)
- Facile à importer-exporter à travers les systèmes (+)
- Difficile de changer la valeur car elle doit être modifiée dans tous les tableaux référents (-)
- L'ajout de nouvelle valeur n'est pas coûteux (=)
Je pense que c'est presque comme « passer par la valeur », pour tirer une analogie de l'appel de fonction dans le jargon de programmation d'application.
L'option (b) , par exemple,
+---------------+----------------+---------+
| candidate_idn | party_code_idn | city |
+---------------+----------------+---------+
| 1 | 1 | Alaska |
| 2 | 2 | Memphis |
+---------------+----------------+---------+
a les propriétés ci-dessous:
- Non lisible pour l'utilisateur final (-)
- Difficile d' importer-exporter car il faut le dé-référencer (-)
- Changement facile des valeurs, car nous stockons uniquement les références dans les tables de transactions (+)
- L'ajout de nouvelle valeur n'est pas coûteux (=)
Il est très similaire à « passer par référence », si on le compare à l'appel de fonction dans le langage de programmation d'application.
Import-export peut également être fait d'une manière différente, à savoir, tout en alimentant la table de consultation à nouveau puis réensemencer la colonne de substitution. J'espère que je comprends bien, c'est quelque chose que je viens d'entendre comme une possibilité.
1. Notez que +
, -
et =
indiquer l'avantage de ces propriétés.
Question
Assez important: y a-t-il une différence entre une table de recherche (ou code ) et une référence FK si nous voulons simplement utiliser cette dernière approche? Je pense qu'ils fonctionnent tout de même.
FOREIGN KEY
composée de trois champs et que cela se trouve en outre dans une autre table, cela peut devenir assez compliqué mais YMMV.UNIQUE CONSTRAINT
s etNOT NULL
s - eh bien, vos entrées de table de code sontFOREIGN KEY
s dans les tables qui les utilisent / s'y réfèrent - donc les concepts sont liés, mais pas les mêmes. La clé de substitution de la table de codes est le champ qui apparaît dans la table "enfant" - moins lisible certes, maisINT
pas très grand - pas beaucoup d'espace requis, ce qui est un avantage des clés de substitution.Il existe une troisième approche qui présente certains des avantages de vos deux options - mettre un code réel dans la table de code. J'entends par là une courte séquence de caractères qui capture l'essence de la pleine valeur et est unique. Pour votre exemple donné, il peut être
Le code est transposé dans les tables transactionnelles comme une clé étrangère. Elle est courte, intelligible et quelque peu indépendante des données "réelles". Des modifications incrémentielles du nom ne suggéreraient pas de changement de code. Si les républicains décampaient en masse , cependant, un changement de code pourrait être nécessaire, avec les problèmes qui en découlent qu'un identifiant de substitution ne serait pas encouru.
Ce style a été appelé codage d'abréviations. Je peux recommander l'écriture de Celko à ce sujet. Google books en contient plusieurs exemples. Recherchez "Codage Celko".
Autres exemples: encodages à 2 ou 3 lettres pour les pays, encodage à 3 lettres (GBP, USD, EUR) pour les codes de devise. Court, explicite et ne change pas (et il y a un ISO pour eux).
la source