7

我最近将一个非常大的数据库表分解为更小的、可管理的表,并且在大多数情况下我对我的工作感到满意,并且我觉得数据已正确规范化。

但有一个例外。有问题的表格来自产品数据库,该数据库存储有关公司销售的(您猜对了)产品的信息。我已将大部分信息分成两个表:ProductBaseProductBasePackaging.

这些表包含与基本零件编号相关的信息,而不是与单个产品相关的信息(每个基本编号有多个产品)。

ProductBase包含相当一般的信息,例如等MarketingCopyKeywords以及关于结构的信息,即材料、组件等。

当然ProductBasePackaging还有关于包装的数据。

现在我正在编写用于数据操作的应用程序,我开始怀疑自己。看来我现在让自己变得更难了,因为我必须跟踪使用相同键(基本部件号)的多个表。还是我将它们分开并可能更进一步并将结构也分开到它自己的表中是正确的?

我非常精通 sql 的使用,但这是我第一次真正设计数据库结构,更不用说重组现有的大型数据库了。所以基本上我要问的是我应该有多个具有相同键的表,这些表按数据类型分隔,还是将事物放在一个表中,我可以使用相同的键从一个表中引用我需要的所有内容?

抱歉,我知道要阅读的内容很多,我希望它有意义,并感谢所有通过它的人!

4

2 回答 2

8

规范化现在可能看起来很痛苦 - 但相信我,从长远来看,你会很高兴你做到了!随着时间的推移,除了厨房水槽之外的所有东西的非规范化“扁平”表将变得非常难以管理,数据不一致将逐渐蔓延,在你知道之前,你有一大堆废话 - errrg - 数据不再有意义了!

是的,连接表可能有点工作 - 但特别是对于显示数据,您绝对应该查看可以帮助您编写这些 JOIN 一次的视图,然后将它们用作再次保存所有内容的“虚拟表”。

数据库规范化 - 高达大约 3NF - 肯定是一件好事(TM)!我总是建议这样做,然后也许在那时引入一些有限的非规范化,性能需要可能需要它 - 但只能以一种非常可控的方式,并且在你充分理解和知道你实际上再次非规范化的情况下.

于 2011-04-20T18:23:03.007 回答
3

答案是视情况而定

这取决于您通常查询的内容、通常查询的方式、查询的频率、容纳所有数据的表有多大……等等。这取决于。 如果您需要定期查询聚合或派生数据并且编译过程需要“很长时间”,则您可能不想规范化
一个示例是。通常虽然我认为数据应该被规范化。

话虽如此,我不确定您所描述的是“规范化”还是分离。规范化将涉及删除不同列中的重复数据。

让我们以您的包装为例...在我看来,您已经在某些与该或某事ProductBasePackaging相关的内容中做了记录。PartNumberProductBase

实际上,如果您要对数据进行规范化……您将ProductBasePackaging只为每种类型的包装设置一行……就像您运送 1000 种不同的产品但只使用 10 种不同类型的盒子一样。 ProductBasePackaging将有 10 行,每行都有一个唯一框的信息...然后ProductBase将引用其所需的框PackagingID

于 2011-04-20T18:19:36.327 回答