2009-06-14 4 views
1

私は100台ほどのテーブルを作る必要があります。 PartStatsXXXと呼ばれるテーブルがあり、作成されるテーブルはすべてPartReviewXXX(1対nの関係で互いにペアになります)と呼ばれます。パーツタイプの製品レビューを保存する1つの大きなテーブルまたは別のテーブル?

すべての製品(ビジネスの観点から見ると同じ用語である製品と部分)を格納するために大きなテーブルを作成すると効率的ですか?誰かが、PartStatsXXXからの主キーの一部としてXXXの値を持つPartStatsXXXからPartsReview(大きなテーブル)への関係を述べました。

XXXは、パーツタイプの名前(バッテリ、配線織機など)です。これはvarcharになります。コンポジットキーを作るべきですか?パーツタイプは名前を変更しません(一部のパーツ名はカルチャーによって複数の名前を持つことができます)が、本当に候補IDではありません。それから私はXXXの価値に応じて私が必要とするものについていくつかの意見を得ることができたと言われました。

これは意味があると思います。最善のアプローチは何でしょうか?

おかげ

+0

なぜ唯一の目的は、キー値を列からテーブルの名前に移動することですか?なぜPartsStatsXXXですか? parts_id = "XXX"のPartsStatsはなぜですか? –

+0

PartStatsXXXテーブルが既に存在し、変更できないことを意味しますか? – daremon

答えて

7

マルチテーブルPartStatsXXXは悪い考えです:、適切またはフレームワークでコーディングするのは難しい維持するために難しく、照会する悪夢...

を使用して、2つのテーブル:PartStatsとPartsReview、とパフォーマンスのためにキーとインデックスを適用する。

+0

ありがとうございます。私はそれを与えるだろう。 – dotnetdev

4

各テーブルに格納するテーブルに基づいてテーブルを作成する方が効率的です。 100個の製品に対して100個のテーブルは必要ありません。すべての製品に1つのテーブルが必要です。

だからあなたのニーズに合わせて、私は2つのテーブルを作成します:あなたは別のテーブルを使用して、(すなわち、各テーブルには、列の異なるセットを持っている)、各製品のレビューのための異なるタイプのデータを格納している場合を除き

products 
======== 
id INT 
name VARCHAR 

product_reviews 
=============== 
id INT 
product_id INT (foreign key to products.id) 
rating INT (example column) 
3

を製品ごとに不必要な悪夢が作成されます。

一般的に、同じ列セットを持つ複数のテーブルを持つことは決してありません。既に提案されているように、「product_id」列を持つ表が1つあります。

0

あなたが素早く汚い方法で痛みを軽減したい場合は、2つのテーブルを使用します。その後、

CREATE TABLE PartStats (
    ..., 
    PartType VARCHAR(255), 
    ... 
); 

CreateTable PartReview (
    ... 
    PartType VARCHAR(255), 
    ... 
); 

SELECT ... 
FROM PartStats ps JOIN PartReview pr 
    ON ps.PartType = pr.PartType; 

を経由してそれらを結合する。これは、テーブルの数百を持っていることからあなたを取得しますが、あなたは別の問題のために設定します:冗長データ(PartTypeに)同期から抜け出すことができます。 PartTypeのタイプミスは孤立したレビューになる可能性があります。

特定のPartTypeに対して複数のPartStatsエントリを使用できると仮定した場合の解決方法は、第3のテーブルを以前のPartType名に追加することです。

CREATE TABLE PartType (
    ID INT ..., 
    PartType VARCHAR(255), 
    PRIMARY KEY (ID) 
); 

とし、PartStatsとPartReviewがPartTypeのIDを使用するように調整します。例えば、

​​

これは、あなたがPartStatsまたは非存在PartTypeに用PartReviewを作る防ぐことができます。

問合せのパフォーマンスが問題になる場合は、PartType_IDに2次索引を追加すると役立ちます。

0

私は(数ヶ月前、私は私のデータベース設計スキルを向上させることを決めたので、私はいくつかの異なるブックを見ていたし、これらの2を選んだ)あなたのデータベース設計上の不良ではない、書籍のカップルをお勧めすることができます:

1 )プロSQL Server 2008のリレーショナルデータベースの設計と実装(C)ルイス・ダビッドソン
2)リレーショナルデータベース設計(c)のヤン・ハリントン

幸運を説明明確に!

関連する問題