注: この質問は、明確にするために 11/19/12 に言い換えられました。通常、ここではあまり問題はありませんが、クライアント サイト用の新しい製品システムの設計に苦労しています。私たちは、各クライアントが自分の顧客に販売できる一連の製品を提供します。新製品はいつでも追加できますが、すべて次の形式に従っています。
- カテゴリー
- タイプ
- 製品
前の構造を使用して実際の例を示すには、次のようにします。
- 野球用品
- 手袋
- ローリングス
- ナイキ
- ミズノ
- コウモリ
- イーストン
- ルイビル・スラッガー
- 手袋
- サッカー用品
- 靴
- ナイキ
- リーボック
- アディダス
- フットボール
- ナイキ
- 苗木
- ウィルソン
....
- 靴
上記のリストは明らかに続いており、はるかに大きくなる可能性がありますが、全体的なアイデアを示しています.
現在、特定のクライアントが販売できる製品の種類を、次のように単一のフラット形式のテーブルに格納しています。
ID | clientID | categoryID | typeID | productID | customURL
=============================================================
1 | 111 | 1 | 1 | 1 | 1111
2 | 111 | 1 | 2 | 2 | 2222
3 | 111 | 1 | 2 | 3 | 3333
4 | 111 | 2 | 3 | 4 | 4444
5 | 222 | 1 | 1 | 1 | 5555
6 | 222 | 2 | 3 | 4 | 6666
- 上記の例では、カテゴリ 1 を「野球用品」、カテゴリ 2 を「サッカー用品」にすることができます。
- 対応する categoryID、typeID、および productID の名前は、正規化を維持するために、FK 関係 (innodb) を持つ 3 つの別々のテーブルに格納されます。
- タイプは、第 2 レベルのアイテム (手袋、バット、靴、フットボールなど) を指します。これらの数値が交差することはありません (つまり、たとえ一般的な製品が同じであっても、同じ typeID が存在することはあり得ません (野球用の靴は、サッカー用の靴とは別の ID を持っています)。
- このテーブルでは、clientID 1 は 4 つの製品 (カテゴリ 1 に 3 つ、カテゴリ 2 に 1 つ) を販売できます。ClientID 2 は、各カテゴリに 1 つずつ、合計 2 つの製品を販売できます。
私はテーブルを構造化したままにしておく傾向がありますが、他の設計では、正規化のためにテーブルを分離した可能性があることを知っています。ここに当てはまるかどうかはわかりません. それらを分割すると、次のように、これが 1 つのテーブルから 4 つ以上になることがわかります。
製品提供表
ID | clientID | productID | customURL
======================================
1 | 111 | 1 | 1111
2 | 111 | 2 | 2222
3 | 111 | 3 | 3333
4 | 111 | 4 | 4444
5 | 222 | 1 | 5555
6 | 222 | 4 | 6666
製品定義テーブル
ID | productID | typeID | productName
======================================
1 | 1 | 1 | rawlings glove
2 | 2 | 2 | product2
3 | 3 | 2 | product3
4 | 4 | 3 | product4
タイプ定義テーブル
ID | typeID | categoryID | typeName
=====================================
1 | 1 | 1 | Gloves
2 | 2 | 1 | Bats
3 | 3 | 2 | Shoes
4 | 4 | 2 | Footballs
カテゴリ定義テーブル
ID | categoryID | catName
=============================
1 | 1 | Baseball Equipment
2 | 2 | Football Equipment
私はこれを考えすぎていますか?両方の方法で最終的な解決策が同じように得られませんか?