簡體   English   中英

規范化此數據的最佳方法

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM