3

会社の資産を格納するための複数のテーブルがあります。これらのテーブルには次のものがあります。

• 乗り物

• サーバー

• PC

• 家具

ここで、資産ごとにルックアップ テーブルを作成して、資産モデルを格納します。たとえば、新しい PC を作成するときに、ユーザーはモデル「Dell vostro 350」などを選択します。しかし、何が良いですか。4 つのルックアップ テーブル ( vechicle_model 、Server_models、Pc_models、furniture_model など) を定義するか、1 つのルックアップ テーブルを定義し、そのタイプ (タイプ = PC ) を説明する列を持ちます。

よろしく

4

3 に答える 3

6

似ているように見えるかもしれませんが、別のルックアップ テーブルを使用してください。ただし、Dell vostro 350a) 家具のタイプとして を格納できるようにする場合、または b) データベース内に非常に複雑な制約を設定して、そのような相互選択を防止する場合を除きます。記録されています。

実際、単一のルックアップ テーブルに対するあなたの提案は非常によく知られており、独自の頭字語である OTLT (One True Lookup Table の略) も取得しています。それを検索する気がある場合、ほとんどの場合、「アンチパターン」または「初心者の間違い」と同じように言及されています。

于 2013-06-28T09:03:31.560 に答える
2

これらのテーブルは、同じ列、制約、および物理ストレージを共有していますか?

  • はいの場合、それらは 1 つのテーブルである必要があります。
  • そうでない場合は、それらを別々に保管してください。

上記の条件は、一見したよりも実際には満たすのが難しいことに注意してください。たとえば、次の場合はテーブルを分けておく必要があります。

  • すべてのキーは、すべてのテーブルの行の結合ではなく、テーブルごとに個別に一意である必要があります。
  • 外部キーが 1 つのテーブルに存在するが別のテーブルには存在しないか、または外部キーが 1 つのテーブルを参照しているが別のテーブルを参照していません。
  • CHECK 制約が 1 つのテーブルに存在しますが、別のテーブルには存在しません。これには、NOT NULL などの単純なものも含まれます。
  • 列の種類またはが異なります。
  • トリガーが異なります。
  • 権限が異なります。
  • テーブル レベルのロックを取得する必要があります。
  • テーブルは、別の方法でクラスター化またはパーティション化するか、単に別のディスクに格納するか、他の物理ストレージ パラメータとは異なる必要があります (DBMS によって異なります)。
  • 等...

そのため、テーブルを別々に保つ必要がある可能性があります。

于 2013-06-28T11:01:50.530 に答える
1

ルックアップにのみ使用する場合は、1 つのテーブル ソリューションを使用します。

モデルに基づいて資産に関するその他の情報を保存する予定がある場合 (たとえば、車両がガソリン/ディーゼルであったか、PC がデスクトップかラップトップかなど)、複数テーブル ソリューションがより適切に機能する可能性があります。

于 2013-06-28T09:00:51.333 に答える