Sql server 避免数据库设计中列过多和复杂性的最佳方法
库存物品:Sql server 避免数据库设计中列过多和复杂性的最佳方法,sql-server,database,sql-server-2008,Sql Server,Database,Sql Server 2008,库存物品: 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 l
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将它们存储在数据库中
根据我的意见,每个列表都有一个主表,并使用联接进行检索。但是,在数据库中添加太多表可能有点复杂
在根据发票存储所有这些信息时,这种规范化有点问题。这导致发票表中的列过多
另一种方法是将所有列放入一个包含更多列的表中,然后每一行将是它们的组合。。(黑客算法4列表,包含24条记录中的4项,这些记录将具有参考ID)
你认为哪一个最好?为什么 你最初的想法是正确的。任何声称四个表“有点复杂”和/或“太多表”的人都不应该做数据库工作。这就是RDBMS的设计(和调整)目的 这4项中的每一项都是某事物的单独属性,因此不能简单地将它们放入合并它们的表中。正如您所想,您可以从以下内容开始:
- 纸张大小
- 镇纸
- 纸模
- 纸型
- 它违背了使用关系数据库管理系统将数据扁平化为非关系结构的目的
- 随着时间的推移,这种结构更难发展
- 这使得查找特定属性的所有图纸实体变得更加笨拙
- 这使得查找特定属性的所有图纸实体的速度变慢/效率降低
- 也许还有其他原因
关于我在撰写上述内容时未涉及的新信息(如发票表等),应通过捕获这些组合的产品/库存表进行抽象。这就是我所说的主要纸质实体。发票表将只引用ProductID/InventoryID(仅作为示例),而Product/Inventory表将具有这些纸张属性ID。我不明白为什么这些属性会出现在发票表中 EDIT2:
关于“属性”查找表的ID,它们不应该自动递增的一个原因是它们的值应该取自应用层中的枚举。这些查找表只是提供“数据字典”的一种方式,以便数据库层能够洞察这些值的含义。Hmm有意义。.我已经开始按照您解释的方式进行设计,在某些时候担心组合和数据冗余。.无论如何,我将继续这样做,我会回来发表评论,如果这最后最合适的话。同时,我需要考虑在前端的CRUD操作的复杂性和性能。我将很快更新这个…@杰伊关于“需要考虑CRUD操作中的复杂性和性能”:这是一个向后的方法。不要为单记录操作进行优化(而且这些操作无论如何也不会变得更复杂——我将添加一个EDIT2,以防万一)。正确完成的数据模型应该在大多数/所有情况下都能很好地工作。但是,随着时间的推移,随着发票和库存/产品表的增长,CRUD操作仍然会很好。但对大范围行的查询将受到影响。现在,为了节省2小时的工作而偷工减料,不值得花20多个小时来调试和修复它。