4

これはデータベース設計の質問であり、値のセットが2つしかない場合に、プロのデータベース管理者がどのようにアプローチするのか興味があります。以下の2つの設計シナリオの例を見てください。なぜ?

シナリオ1

 table INVOICES
 -------------------------------
 id | royalty_fee | royalty_type
 -------------------------------
 1  | 15          | percentage
 2  | 10.00       | fixed
 1  | 25          | percentage
 1  | 25.00       | fixed

また....

シナリオ2

 table INVOICES
 ----------------------------------
 id | royalty_fee | royalty_type_id
 ----------------------------------
 1  | 15          | 1
 2  | 10.00       | 2
 1  | 25          | 1
 1  | 25.00       | 2


 table ROYALTY_TYPES
 -------------------------------
 id | label
 -------------------------------
 1  | percentage
 2  | fixed
4

3 に答える 3

7

アプローチ2の方が優れています。開発者は2番目のテーブルROYALTY_TYPESを検索に使用できます。また、新しいタイプを追加したり、ROYALTY_TYPESのラベルを編集/更新したりする場合は、簡単に行うことができます。ROYALTY_TYPESでラベルを編集/変更する場合、変更が必要なのは1か所のみで、テーブルの請求書は影響を受けません
。編集:
データベース設計に関して通常3つのことを探します。
追加のしやすさ:最初のアプローチでは、請求書の記録がない場合、新しいロイヤリティタイプを追加することはできません。つまり、新しいタイプを追加したい場合は、将来の請求書のためにHalfFixedとしましょう。HalfFixedタイプの請求書を取得しないと、それを行うことはできません。
更新は簡単です。ロイヤリティタイプを「FIX」に更新する場合を考えてみましょう。最初のアプローチに従っている場合は、複数の行で更新する必要があります。
削除の簡単さ今、ロイヤリティタイプからタイプを削除したい場合は、最初のアプローチに従って、テーブルに対して更新ステートメントを実行し、特定のロイヤリティタイプをNULLに設定する必要があります。

于 2012-04-19T17:07:28.097 に答える
2

私は後者を使用しますが、それについては疑問の余地はありません。

  1. 他の王族のタイプが決してないことを絶対に確信できますか?いいえ、あなたがすることはできません。
  2. 外部キー関係によってroyalty_type_id列を検証できます...royalty_typeではそうではありません...ハードコーディングされたテキスト値でチェック制約を使用する必要があります。
  3. Royaly_typesテーブルを使用すると、必要に応じてロイヤリティタイプエンティティ自体に新しい機能を追加できます。
于 2012-04-19T17:11:35.540 に答える
1

トランザクションデータベースでは、2の方が適しています。1はデータウェアハウスシステムに使用できます。

于 2012-04-19T17:11:34.497 に答える