你的目標應該是讓一個數據庫設計沒有硬連接到有關其內容的細節,如果它確實(必須)它的確如此,從而將專業化從核心DB設計中分離出來。
每個訂單都有一些常見的字段。將這些放在一個表中,並將其引用到相應(專用)表中的其他行。這就是爲你的數據庫規範化。
您可以在主表中包含ID, OrderID, ItemType, ItemID
,當ItemType
確定表ItemID
指的是表。我建議不要這樣做,但必須承認我有時會使用它。
更好的辦法是有這些表:
Clients: ID, Name, Address, Phone
Sellers: ID, Name, CompanyAlias
Orders: ID, ClientID, SellerID, Date, Price
OrderItems: ID, OrderID, DiscountAmount, DiscountPercentage,
ProductDomainID, ProductBottleID, ProductCheeseID, ..
現在OrderItems
是神奇在哪裏發生。前四個領域解釋自己我猜。而其餘的是指不改變或刪除過任何一個表:
Products_Cheese ID, ProductCode, ProductName, Price
如果你需要一個特定的順序變型產品添加一個字段VariantOfID
這就是否則爲NULL。然後參考該ID。
該OrderItems
表可以添加字段,而不會干擾已建立的數據庫結構。只需限制自己在除0123之外的所有Product*ID
字段中使用NULL
值。但是,如果進一步考慮這一點,甚至可能會出現情景,希望將兩個或多個字段組合在一起。例如,添加與ProductCheeseID
並排設置的或ExtraServicelevelagreementID
字段。
如果使用ProductCheeseID
+ + ExtraServicelevelagreementID
客戶可以訂購SLA一個奶酪訂閱,你的數據庫結構不會重演這樣。
這個基本的設計是開放的替代想法和解決方案。但保持你的結構分離。不要製作一張巨大的桌子,其中包含您可能需要的所有領域,一旦您必須稍後改變某些東西,事情就會突然崩潰。
什麼是「最佳」數據模型是一個主觀問題,如果沒有關於您的系統應該做什麼的更多細節,這是不可能回答的。例如,在什麼時間間隔訂閱帳單?所有訂閱都以相同方式結算嗎? 「一次性定價產品」和「變量服務」之間有什麼區別?訂單相關的其他數據元素是什麼?等等顯示你現在的模型看起來可能會回答很多這些問題。 – Nico
我認爲_make從10行描述的數據庫設計_不適用於真正的應用程序。否則顧問就無能爲力。 –