[英]Best approach to avoid Too many columns and complexity in database design
庫存物品:
Paper Size
-----
A0
A1
A2
etc
Paper Weight
------------
80gsm
150gsm etc
Paper mode
----------
Colour
Bw
Paper type
-----------
glass
silk
normal
Tabdividers and tabdivider Type
--------
Binding and Binding Types
--
Laminate and laminate Types
--
此類庫存項目以及所有這些都需要存儲在發票表中
如何使用適當的RDBMS將它們存儲在數據庫中。
根據我的意見,每個列表都包含一個主表並使用JOINS進行檢索。 但是,向數據庫中添加太多表可能有點復雜。
當針對發票存儲所有這些信息時,這種規范化存在一些問題。 這導致發票表中的列過多。
另一種方法是將它們全部放入一個具有更多列的表中,然后每一行將它們組合在一起。(黑客算法4列表,其中24條記錄中有4個項目將具有參考ID)。
您認為哪一個最好?為什么!
您最初的想法是正確的。 任何聲稱四個表“有點復雜”和/或“太多表”的人都不應從事數據庫工作。 這就是RDBMS設計(和調整)的目的。
這4個項目中的每一個都是某物的單獨屬性,因此不能簡單地將它們原樣放入合並它們的表中。 如您所想,您首先要:
這些是查找表,因此應具有非自動遞增的ID字段。
這些將用作主要紙質實體的外鍵字段。
或者,如果它們只能以某些組合形式存在,那么就需要一個關系表來捕獲/管理那些有效組合。 但是,這四個紙質“屬性”仍然是關系表的外鍵獨立表。 有些人會在該關系表上放置一個單獨的ID字段,以通過單個值唯一地標識組合。 就個人而言,除非有諸如復制(或其他過程/功能)之類的技術要求,要求每個表都具有一個單字段鍵,否則我不會這樣做。 取而代之的是,我只是從指向那些紙張“屬性”查找表的四個ID字段中選出PK。 然后,這四個字段仍將進入任何基於紙張的實體。 到那時,主要紙質實體表的外觀將與沒有關系表時的外觀大致相同,不同之處在於,不是每個紙質“屬性”都有4個FK,每個ID字段都是一個ID字段表中,將有一個FK,由4個ID字段指向關系表的PK。
為什么不把所有東西都塞進一張桌子呢? 因為:
編輯:
關於我在撰寫本文時沒有出現的新信息(例如發票表等),應通過可捕獲這些組合的產品/庫存表進行抽象。 這就是我所指的主要紙張實體。 發票表將僅引用ProductID / InventoryID(僅作為示例),而Product / Inventory表將具有這些紙張屬性ID。 我看不到為什么這些屬性會出現在發票表中。
編輯2:
關於“屬性”查找表的ID,不應對其進行自動遞增的原因之一是,其值應取自應用程序層中的Enums。 這些查詢表只是提供“數據字典”的一種方式,以便數據庫層可以洞悉這些值的含義。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.