Nachschlagetabellen (oder Codetabellen , wie sie manche nennen) sind normalerweise eine Sammlung der möglichen Werte, die für eine bestimmte Spalte angegeben werden können.
Angenommen, wir haben eine Nachschlagetabelle mit dem Namen party
(die Informationen über politische Parteien speichern soll), die zwei Spalten enthält:
party_code_idn
, das vom System generierte numerische Werte enthält und (ohne Bedeutung für die Geschäftsdomäne ) als Ersatz für den realen Schlüssel fungiert.party_code
ist der eigentliche oder „natürliche“ Schlüssel der Tabelle, da Werte mit Geschäftsdomänen- Konnotationen beibehalten werden .
Angenommen, eine solche Tabelle enthält die folgenden Daten:
+----------------+------------+
| party_code_idn | party_code |
+----------------+------------+
| 1 | Republican |
| 2 | Democratic |
+----------------+------------+
Die party_code
Spalte, in der die Werte "Republikanisch" und "Demokratisch" als der eigentliche Schlüssel der Tabelle beibehalten werden, ist mit einer EINZIGARTIGEN Einschränkung eingerichtet, die ich jedoch optional hinzugefügt party_code_idn
und als PK der Tabelle definiert habe (logischerweise) , party_code
kann als PRIMARY KEY ([PK]) fungieren.
Frage
Was sind die Best Practices für den Verweis auf Nachschlagewerte aus Transaktionstabellen ? Sollte ich Verweise auf FOREIGN KEY (FK) erstellen, entweder (a) direkt auf den natürlichen und aussagekräftigen Wert oder (b) auf Ersatzwerte?
Option (a) , zum Beispiel
+---------------+------------+---------+
| candidate_idn | party_code | city |
+---------------+------------+---------+
| 1 | Democratic | Alaska |
| 2 | Republican | Memphis |
+---------------+------------+---------+
hat die folgenden Eigenschaften 1 :
- Lesbar für den Endbenutzer (+)
- Einfach systemübergreifend zu importieren und exportieren (+)
- Es ist schwierig, den Wert zu ändern, da er in allen Verweistabellen geändert werden muss (-)
- Das Hinzufügen eines neuen Werts ist nicht teuer (=)
Ich denke, es ist fast so , als würde man einen Wert übergeben, wenn man eine Analogie aus dem Funktionsaufruf in der Fachsprache der Anwendungsprogrammierung zieht .
Option (b) zum Beispiel
+---------------+----------------+---------+
| candidate_idn | party_code_idn | city |
+---------------+----------------+---------+
| 1 | 1 | Alaska |
| 2 | 2 | Memphis |
+---------------+----------------+---------+
hat die folgenden Eigenschaften:
- Nicht lesbar für den Endbenutzer (-)
- Schwierig zu importieren und zu exportieren, da wir die Referenzierung aufheben müssen (-)
- Einfach zu ändern, da wir nur Referenzen in Transaktionstabellen speichern (+)
- Das Hinzufügen eines neuen Werts ist nicht teuer (=)
Im Vergleich zum Funktionsaufruf in der App-Programmiersprache ähnelt es sehr dem Begriff „ Referenzübergabe “ .
Das Importieren und Exportieren kann auch auf andere Weise erfolgen, z. B. durch erneutes Auffüllen der Nachschlagetabelle und anschließendes erneutes Setzen der Ersatzspalte. Ich hoffe, dass ich das richtig hinbekomme, das ist etwas, was ich gerade als Möglichkeit gehört habe.
1. Beachten Sie, dass +
, -
und =
geben Sie den Vorteil dieser Eigenschaften.
Frage
Ganz wichtig: Gibt es einen Unterschied zwischen einer Nachschlagetabelle (oder einer Code- Tabelle) und einer FK-Referenz, wenn wir nur den letzteren Ansatz verwenden? Ich denke, sie funktionieren genauso.
FOREIGN KEY
anderen Tabelle steht, kann es ziemlich chaotisch werden, aber YMMV.UNIQUE CONSTRAINT
s undNOT NULL
s erzwingen. Nun , Ihre Codetabelleneinträge befinden sichFOREIGN KEY
in den Tabellen, die sie verwenden / auf sie verweisen. Die Konzepte sind also verwandt, aber nicht gleich. Der Ersatzschlüssel der Codetabelle ist das Feld, das in der "Kind" -Tabelle erscheint - sicherlich weniger lesbar, aberINT
nicht sehr groß - nicht viel Platz erforderlich, was ein Vorteil von Ersatzschlüsseln ist.Es gibt einen dritten Ansatz, der einige der Vorteile Ihrer beiden Optionen bietet: Fügen Sie einen tatsächlichen Code in die Codetabelle ein. Damit meine ich eine kurze Zeichenfolge, die das Wesentliche des vollen Wertes erfasst und einzigartig ist. Für Ihr gegebenes Beispiel kann es sein
Der Code wird als Fremdschlüssel in Transaktionstabellen übertragen. Es ist kurz, verständlich und von den "realen" Daten einigermaßen unabhängig. Inkrementelle Änderungen am a-Namen deuten nicht auf eine Codeänderung hin. Sollten sich die Republikaner jedoch massenhaft auflösen , kann eine Änderung des Codes mit den damit verbundenen Problemen erforderlich sein, die nicht durch eine Ersatz-ID verursacht würden.
Dieser Stil wurde als Abkürzungscodierung bezeichnet. Ich kann Celko empfehlen, darüber zu schreiben. Google Bücher enthält mehrere Beispiele. Suchen Sie nach "Celko Encoding".
Weitere Beispiele: 2- oder 3-Buchstaben-Codierung für Länder, 3-Buchstaben-Codierung (GBP, USD, EUR) für Währungscodes. Kurz, selbsterklärend und unverändert (und es gibt eine ISO für sie).
quelle