数据库规范化

Nic*_*ick 7 sql database-normalization

我最近将一个非常大的数据库表拆分成了较小的,可管理的表,而且大多数情况下我对我的工作感到满意,并且我觉得数据已正确规范化.

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

这些表格包含与基本部件号相关的信息伞,而不是单个产品(每个基本号都有多个产品).

ProductBase包含相当一般信息,如MarketingCopy,Keywords等,并且还对施工即材料信息,部件等.

ProductBasePackaging当然,持有关于包装的数据.

现在我正在编写数据操作的应用程序,我开始猜测自己.现在我似乎已经让自己变得更难了,因为我必须跟踪使用相同密钥的多个表(基本部件号).或者我是否正确地将它们分开并且可能更进一步将结构分成它自己的表格?

我非常精通使用sql,但这是我第一次真正设计数据库结构,更不用说重构大型现有数据库了.所以基本上我要问的是,我应该有多个具有相同键的表,这些表由数据类型分隔,或者在单个表中保存在一起,我可以使用相同的键从一个表中引用我需要的所有内容吗?

对不起,我知道这是很多东西,我希望它有意义,并感谢所有通过它的人!

mar*_*c_s 8

规范化现在可能看起来像a**中的痛苦 - 但相信我,从长远来看,你会很高兴你做到了!随着时间的推移,除了厨房水槽之外的所有东西的非标准化的"平面"桌子将变得非常难以管理,数据不一致将会蔓延,在您知道之前,您有一大堆垃圾 - 错误 - 数据不会再有意义了!

是的,连接表可能有点工作 - 但特别是对于显示数据,你一定要查看一下可以帮助你编写一次JOIN的视图,然后将它们用作再次保存所有内容的"虚拟表".

数据库规范化 - 大约3NF - 肯定是一件好事(TM)!我总是建议这样做,然后可能在那时引入一些有限的去规范化,其中性能需求可能需要它 - 但只能以一种非常可控的方式,并且你完全理解并知道你实际上已经再次正常化了一些东西.