[英]Best way to normalize this data
我有兩個表,'產品'和'產品包'。
一種產品可以出現在許多產品包中,而產品包可以有許多產品(多對多關系)。
我還創建了一個鏈接表來嘗試解決這種關系,但我留下了以下難題:
-------------------
| 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 |
這是數據庫設計的常規做法嗎? 這可以進一步改進嗎?
你有一個很好的起點。
在這里你應該考慮,使表的兩個字段成為復合的主鍵。 這將防止@musical_coder注意到的重復記錄。
您還可以考慮添加一個整數列,指示包中的產品數量。
最后,您可能希望添加一些元數據列,例如CreatedWhen,CreatedBy,LastUpdatedWhen和LastUpdatedBy。 這些往往會不時派上用場。
products. 根據我的經驗,我會說這種關系沒有問題,但在分析數據時需要非常小心,但是如何建模是合乎邏輯的,產品在包裝中,包裝包含產品。 所以這還不錯。
編輯:這是一個過時的答案,因為海報修復了他的示例數據不再包含重復的元組
從數據庫規范化的角度來看,這個設計有點棘手:如果在該表中有兩個相同的元組應該有意義(例如,一個計數),那么這個表有一個多集語義,它不能很好地與關系模型,因為你沒有密鑰。
具有主鍵(Prod_ID,PP_Id)的表(Prod_ID,PP_Id,Count)是更好的(第三范式)設計。
編輯:
所以你的桌子變成了
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.