2016-05-09 9 views
-1

私は、次の表があります。列または結合表を追加しますか?

材質表(建設されるため)

MaterialID 
ProductID 
ProductDescription 
OtherPropetries... 

製品テーブル(既に存在する)Materialテーブルで

ProductID 
ProductDescription 

、私がすべきをProductDescriptionのままにするか、削除してMaterialProductテーブルにProductCode列?そしてどちらが優れたパフォーマンス賢明ですか?

私はDescription列を追加する冗長性を認識していますが、パフォーマンスゲインがの場合は - 価値があると思います。

+2

あなたの好み。私は、記述フィールドが実際にパフォーマンスに影響を与えるとは思わない。もちろん、それは数百万のエントリを持つnvarchar(MAX)であり、各エントリにはGBのテキストがあります。その後、あなたは問題を抱えています – Kramb

答えて

2

テーブルに冗長フィールドを追加すると、読み込みのパフォーマンスが向上しますが、書き込み(挿入または更新)時に速度が低下し、ディスク領域が増え、複雑なコード(挿入用)が発生する可能性があります。

したがって、使用状況によって異なります。高速クエリを実行することがアプリケーションにとって非常に重要な場合は、これを行うことができます。

しかし、言い訳は次のように言っています。それを実行させ、正しいものにし、速くします。だから、あなたが本当に必要とするポイントまで、そのようなパフォーマンスの最適化を延期するべきでしょう。

1

インデックスがあると仮定すると、パフォーマンスを考慮すると、システムのスケールはと非常に大きくなります()。

私はデータの重複を避けるでしょう。重複データの管理は悪夢です。製品コードの記述を修正するとどうなりますか?あなたは両方のテーブルにそれを設定しますか? Productテーブルをインポートして更新するコードを作成する場合は、常にMaterialテーブルを更新することを忘れないでください。あるいは、マテリアルテーブルの記述を変えることができますか?ユーザーは、同じ商品コードの商品説明に、商品と商品が一致しない場合に、そのようなことが起こる理由を理解していますか?それが起こるためのユースケースがありますか?ユーザーがサードパーティのアプリケーションを使用してデータベースとやり取りすることを決定した場合はどうなりますか? アプリケーションは両方の場所を更新することを忘れないでくださいか、または何らかの方法でそれらを同期させるためにトリガーなどを入れなければなりませんか?そうしないと、ユーザーは最後に使用された説明がどれか分かりますか?

私の他の質問は、あなたがサンプルデザインのマテリアルで外部キーとして使用しているため、ProductCodeが一意でなければならないと仮定しています。その場合、ProductにProductIDフィールドがあるのはなぜですか?実際にサロゲートキーを使用していない場合(これはProductIDと仮定しています)、ProductIDはどのような目的のために使用されますか?

+0

私は同意します。これはすべて頭痛と間違いです。私はメインのポストを編集し、列の1つを削除しました... thx! – usefulBee

関連する問題