すべての答えを要約すると、ルックアップテーブルには4つの選択肢があると思います。
代替案1:
•説明(主キー、より長いvarchar2列)
代替案2:
•コード(主キー、短いvarchar2列)
•説明(nullではない、長いvarchar2列)
代替案3:
•Id(意味のない主キー、シーケンスから派生した整数値)
•説明(nullではなく、より長いvarchar2列)
代替案4:
•Id(意味のない主キー、シーケンスから派生した整数値)
•コード(一意のキー、短いvarchar2列)
•説明(nullではない、長いvarchar2列)
主キー列はメインテーブルにあり、外部キー制約が上にあります。
代替案ごとのいくつかの特徴:
代替案1:
•メインテーブルのクエリ時に結合は必要ありません•メインテーブル
でアドホッククエリを実行する場合の明確な意味•メインテーブル
により多くのストレージが必要です•メインテーブルの
インデックスは他の代替案よりもはるかに大きくなり
ます•説明値の更新メンテナンスの問題と、場合によってはアプリケーションのダウンタイムを意味します。
代替案2:
•説明値を取得する場合は結合が必要です
。•特定のルックアップ値でフィルター処理する場合は結合は不要です。そのためのコード値を使用できます。
•メインテーブルでアドホッククエリを実行する場合の非常に明確な意味•メインテーブルの
最小限の追加ストレージ要件
•メインテーブルのインデックスは小さくなります。
•Description値の更新は簡単ですが、コードは通常、descriptionの省略形です。Description値を更新すると、コードが混乱する可能性があります。
代替案3:
•説明値を取得する場合は結合が必要です
•特定のルックアップ値でフィルタリングする場合、IDは無意味であるため、クエリで説明値を使用する必要があります。
•メインテーブルでアドホッククエリを実行する場合の意味が明確ではありません
•メインテーブルの追加ストレージ要件が最小限に抑えられます
•メインテーブルのインデックスが小さくなります。
•説明値の更新は簡単で、コード値のように混乱を招くことはありません
代替案4:
•説明値を取得する場合は結合が
必要です。•特定のルックアップ値でフィルタリングする場合は結合が必要です。ルックアップテーブルのコード値を使用します。
•メインテーブルでアドホッククエリを実行する場合の意味が明確ではありません•メインテーブル
の追加ストレージ要件が最小限になります
•メインテーブルのインデックスが小さくなり
ます•説明値の更新が簡単で、コード値も非常に簡単に更新できます。 Descriptionの値に似せてください。ただし、これを行うときは、コードの一部を再検討する必要があるかもしれません。
個人的な意見:
メインテーブルとルックアップテーブルをどのように使用する予定かを見ていきます。どのクエリが重要で、効率的に実行する必要がありますか?値は変更されますか?
私の個人的な選択は、代替案2または4です。コード値が決して変更されないことが絶対に確信できる場合は、代替案2を使用します。そして、これはまれです。国コードが変更され、社会保障番号が変更されます。通貨コードの変更など。したがって、ほとんどの場合、代替4を選択します。特にルックアップテーブルが小さなテーブルであるため、余分な結合についてはそれほど心配していません。
ただし、要件に合った代替手段を選択してください。
代替案の特徴がわかったら、テキストを自由に編集してください。
よろしく、
ロブ。