[英]Doubt regarding a database design
我對數據庫設計有疑問,假設有一個財務/股票軟件
在軟件中,用戶將能夠創建訂單,這些訂單可能包含公司產品或第三方產品
典型產品表:
PRIMARY KEY INT productId
KEY INT productcatId
KEY INT supplierId
VARCHAR(20) name
TEXT description
...
但我還需要在公司產品中提供更多細節,例如:
INT instock
DATETIME laststockupdate
...
問題是,我應該如何存儲數據? 我在想2個選項:
1 -
將公司和第三方產品放在一張桌子上,
某些列不會被第三方產品使用
確定公司產品是由供應商ID識別的
2 -
將公司產品和第三方分開放在表格中
3 - [新,謝謝RibaldEddie]
有一個產品表,
公司產品在單獨的表格中有額外的信息
提前致謝!
您沒有提及需要存儲單獨的供應商信息,只是一種產品類型有額外信息。 因此,您可以擁有一個產品表和一個InHouseProductDetails表,該表將productId外鍵返回到存儲公司特定信息的products表。 然后,當您運行查詢時,可以將products表連接到詳細信息表。
好處是您不必在products表中具有NULLable列,因此您的數據更容易損壞,並且您不必將產品本身存儲在兩個單獨的表中。
Oooo跟3一起去! 3是最好的!
說實話,我認為#1或#2的選擇完全取決於其他一些因素(目前我只能選擇2):
如果您確實使用單個表格來存儲所有庫存,那么后來決定拆分它們,您可以。 您建議某種供應商標識符。 在表格(包括您的公司)中列出供應商,其中包含您的庫存密鑰。 那真的沒關系。
就UNION而言,自從我編寫原始Sql以來已經有一段時間了 - 所以我不確定UNION是否是正確的語法。 但是,我知道您可以從多個表中提取數據。 實際上只是發現了這一點: 使用Sql連接從多個表中檢索數據
我同意RibaldEddie。 只需添加一件事:在InHouseProductDetails表中對該外鍵設置唯一約束。 這將強制它是兩個表之間的一對一關系,因此您不會意外地為一個產品最終得到兩個InHouseProductDetails記錄(可能來自某些dataload出錯了什么)
限制就像防御性駕駛; 他們幫助防止意外...
一個表用於具有Vendor表的外鍵的產品; 在Vendor表中包含您自己的公司
然后,Stock表可用於存儲任何產品的庫存水平信息,而不僅僅是您的產品
請注意,無論如何您都需要Stock表,這只會使數據庫模型更加與公司無關 - 因此,如果您需要存儲有關第三方產品的庫存級別信息,則無需更改數據庫
我建議使用#1點。 當另一家供應商出現時會發生什么? 在一個產品表/ produst類上擴展也更容易。
同時考慮您的應用程序的測試。 將所有數據放在一個表中會提出測試應用程序的第三方和公司元素以進行任何更改的可能要求。
如果您對單元測試能夠解決這個問題感到高興,那就不用擔心......如果您依賴於人工測試人員,那么在調整變更影響時就會出現問題。
就個人而言,我會選擇具有共同細節的單一產品表,以及針對第三方和公司細節的單獨表格。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.