sql - 数据库规范化

标签 sql database-normalization

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

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

这些表格包含与基本零件编号而非单个产品相关的信息总括(每个基本编号对应多个产品)。
ProductBase包含相当一般的信息,例如 MarketingCopy , Keywords等以及有关结构的信息,即 Material 、组件等。

ProductBasePackaging当然保存有关包装的数据。

现在我正在编写用于数据操作的应用程序,我开始重新猜测自己。似乎我让自己变得更难了,因为我必须跟踪使用相同 key (基本零件号)的多个表。或者我是否正确地将它们分开并且可能更进一步并将构造分离到它自己的表中?

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

抱歉,我知道要读很多东西,我希望它是有道理的,并感谢所有通过的人!

最佳答案

标准化现在可能看起来像一个 ** 痛苦 - 但相信我,从长远来看,你会 很高兴 你做到了!随着时间的推移,除了厨房水槽之外的所有东西的非规范化“平面”表格将变得非常难以管理,数据不一致会蔓延,在你意识到之前,你有一大堆热气腾腾的垃圾 - errrg - 数据没有没有任何意义了!

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

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

关于sql - 数据库规范化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5734774/

相关文章:

ruby-on-rails - 如何将 postgres 列类型从字符串转换为 float

SQL - 如何转义 PostgreSQL 中的括号

Excel 中的 SQL 查询给出 "undefined function name"错误

php - 创建具有多个列和表变量的查询

mysql - 查找mysql中最后一个序列的开始时间

SQL Server - 有没有一种简单的方法可以在搜索时忽略引号?

mysql - SQL - 规范化问题

mysql - 数据库规范化(1NF 到 3NF)

database - 3NF 和关系和函数依赖的无损分解

database-design - 3NF 和 BCNF 有什么区别?