2011-01-13 20 views
1

私は(リレーショナル)データベーススキーマを設計しており、次のどれが最も適切な設計になるかを調べたいと思っていました。データベース設計の質問(余分なフィールドと追加のテーブル)

シナリオ:

表ProductProperties:60のフィールド(フィールドCREATEDBYを介してユーザーのテーブルへの外部キー参照)

表ユーザー:5つのフィールド

アプリケーションはまた、ユーザーを可能にします基本と高度なフィルタを作成します。これらのフィルタは、ProductPropertiesテーブルのプロパティと同じです。高度なフィルタが、私はどちらかの可能今すぐすべての60

で構成されている間、基本的なフィルタは、10個のフィールドを使用しています。

1)表、すなわちProductProperties、FILTERNAME、IsAdvancedFilter、IsFilterに三つのフィールドを追加します(ロットで結果実際の製品ではなく、フィルタでのレコードのNULL値)

あるいは、

2)の二大VEの結果としてProductPropertiesテーブルの近くにレプリカだろうフィルタテーブルを作成します。 ry類似のテーブル

どちらが優れたデザインですか?

ありがとう、

+0

ProductPropertiesはどのように使用しますか? ProductPropertiesの外部キーを持つ製品テーブルがありますか? –

+0

@Nitinはい、正しいです。 – fjxx

答えて

1

どちらが優れたデザインですか?

"デザイン"ではなく、2つの提案の選択。明らかに(2)

デザインに関する限り、60個のフィールド、ヌル値、非常に大きいProductPropertiesは正規化されません。だから、デザインやデータベースが必要な場合にまず行うべきことは、獣を正規化することです。

  • "データベース"というラベルの付いたコンテナに座っているフラットファイルを処理していますが、ほとんどのSQL関数を使用できます。

デザインがあります。さらに扱いやすい小さなテーブルをいくつか用意し、より多くのリレーショナル機能を可能にします。フィルタを追加するときは、必要に応じていくつかの小さなテーブルを追加し、扱いにくい単一のテーブルに3つのカラムを追加したり、そのコピーを作成したりすることはありません。

第2に、上記とは別に、(2)フィルタテーブルが製品プロパティの近くのレプリカになる方法や理由を理解できません。説明してください。

+0

フィルタテーブルは製品プロパティテーブルの近くのレプリカです。これは、アプリケーションが製品プロパティによるフィルタリングを許可し、作成したフィルタをユーザーが保存できるためです。基本フィルタは5つのプロパティしか使用しませんが、詳細フィルタはすべてのプロパティを使用します。 – fjxx

+0

また、プロダクトプロパティテーブルは正規化できますが、これによりジョイン数が大幅に増加します。 – fjxx

+1

@ fjxx。 1)[OK]を、別の製品テーブルがあります。私の "SQL"のようなフリーウェア(非SQL)を使用していますか?)2)したがって、結合の数を増やす恐れはありますか?これがリレーショナルデータベースの性質です。 3)DDL(表と索引)を投稿し、それぞれのProductTypesとPropertiesを特定する場合は、パフォーマンスを含めて問題全体を修正します。 – PerformanceDBA

1

良いデザインは、常に異なるテーブルに異なる「もの」を持つことです。フィルターが本当に製品と異なる場合は、それらを一緒に混合すると、それを処理しようとすると多くの頭痛が発生します。それらを分離しておくと、そのような頭痛がなくなります。

一般的な列の場合:表はクラスではありませんが、一部の列に共通の列がある場合は問題ありません。

最終的な考え。列を1つに追加するときは、別の列に追加する必要があります。これは、共通の値を持つという理由だけで、異なるものが同じテーブルに混在しているときに得られる頭痛と比べると些細なことです。

関連する問題