0

「製品」と「製品パック」の 2 つのテーブルがあります。

1 つの製品が複数の製品パックに表示され、1 つの製品パックに複数の製品が含まれる場合があります (多対多の関係)。

この関係を解決するためにリンクテーブルも作成しましたが、次の難問が残っています。

-------------------
|  Linking table  |
-------------------
| Prod_Id | PP_id |
|  1      |  3    |
|  1      |  4    |
|  1      |  5    |
|  1      |  6    |
|  1      |  7    |
|  2      |  5    |
|  2      |  7    |
|  2      |  8    |
|  2      |  10   |
|  2      |  4    |

これはデータベース設計の通常の方法ですか? これをさらに洗練することはできますか?

4

3 に答える 3

0

私の経験では、この種の関係は問題ないと思いますが、データを分析するときは非常に注意する必要がありますが、製品がパッケージ内にあり、パッケージにn 個の製品が含まれていることをモデル化する方法は論理的です。だから悪くない。

于 2013-11-04T15:44:02.490 に答える
0

編集:投稿者がサンプルデータを修正して重複したタプルを含まないようにしたため、これは時代遅れの回答です

データベースの正規化の観点から見ると、この設計は少しトリッキーです。そのテーブルに 2 つの同一のタプルがあることに意味があると想定される場合 (たとえば、カウント)、このテーブルには複数セットのセマンティクスがあり、これはデータベースの正規化とうまく混ざりません。キーがないため、リレーショナル モデル。

主キー (Prod_ID、PP_Id) を持つテーブル (Prod_ID、PP_Id、Count) を持つことは、より優れた (第 3 正規形) 設計です。

編集:

だからあなたのテーブルは

create table t (Prod_Id int, PP_Id int, Count int, primary key(Prod_Id,PP_Id));

insert into t values 
(1,3,2),
(1,4,1),
(1,5,1),
(1,6,1),
(1,7,1),
(2,5,1),
(2,7,1),
(2,8,1),
(2,10,1),
(2,4,1);

select * from t;

Prod_Id     PP_Id       Count
----------  ----------  ----------
1           3           2
1           4           1
1           5           1
1           6           1
1           7           1
2           5           1
2           7           1
2           8           1
2           10          1
2           4           1
于 2013-11-04T16:09:56.753 に答える