ルックアップテーブル(またはコードテーブルと呼ばれることもあります)は、通常、特定の列に指定できる値のコレクションです。
たとえば、次のparty
2つの列を持つ(政党に関する情報を保存するための)というルックアップテーブルがあるとします。
party_code_idn
、システム生成の数値を保持し、(ビジネスドメインの意味を欠いて)実際のキーの代理として機能します。party_code
は、ビジネスドメインの意味を持つ値を保持するため、テーブルの実際のキーまたは「自然な」キーです。
そして、そのようなテーブルは以下のデータを保持しているとしましょう:
+----------------+------------+
| party_code_idn | party_code |
+----------------+------------+
| 1 | Republican |
| 2 | Democratic |
+----------------+------------+
party_code
値は「共和党」と「民主党」を続けるの列は、テーブルの実際のキーであること、UNIQUE制約に設定されているが、私は必要に応じて添加party_code_idn
し、論理的に言えば、ものの(表のPKとしてそれを定義しました、party_code
プライマリキー[PK]として機能する場合があります)。
質問
トランザクションテーブルからルックアップ値を指すためのベストプラクティスは何ですか?FOREIGN KEY(FK)参照を確立する必要があります(a)自然で意味のある値を直接参照するか、(b)値を代理しますか?
オプション(a)、たとえば
+---------------+------------+---------+
| candidate_idn | party_code | city |
+---------------+------------+---------+
| 1 | Democratic | Alaska |
| 2 | Republican | Memphis |
+---------------+------------+---------+
次のプロパティ1があります。
- エンドユーザーが読み取り可能(+)
- システム間のインポート/エクスポートが簡単(+)
- すべての参照テーブルで変更が必要なため、値を変更するのが難しい(-)
- 新しい値を追加してもコストはかかりません(=)
アプリケーションプログラミングの専門用語で関数呼び出しから類推するのは、「値渡し」のようなものだと思います。
オプション(b)、たとえば
+---------------+----------------+---------+
| candidate_idn | party_code_idn | city |
+---------------+----------------+---------+
| 1 | 1 | Alaska |
| 2 | 2 | Memphis |
+---------------+----------------+---------+
以下のプロパティがあります。
- エンドユーザーが読めない(-)
- 参照解除する必要があるため、インポート/エクスポートが困難です(-)
- トランザクションテーブルに参照のみを格納しているため、値を簡単に変更できます(+)
- 新しい値を追加してもコストはかかりません(=)
アプリプログラミング用語の関数呼び出しと比較すると、「参照渡し」に非常に似ています。
インポート/エクスポートは、別の方法で実行することもできます。つまり、ルックアップテーブルに再度データを入力してから、代理列を再シードするだけです。私はこれが正しいことを願っています、これは私がちょうど可能性として聞いたものです。
1. なお+
、-
及び=
それらの特性の利点を示します。
質問
かなり重要なこと:後者のアプローチを使用する場合、ルックアップ(またはコード)テーブルとFKリファレンスに違いはありますか?それらはまったく同じように機能すると思います。