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.