Sql server 2008 设计数据库

Sql server 2008 设计数据库,sql-server-2008,database-design,Sql Server 2008,Database Design,我目前正试图为我正在从事的一个新项目设计一个数据库。我的问题源于规范化和非规范化……我想弄明白的是,你是否应该始终最大限度地规范化?数据将是用户很少修改的信息,并且最常与数据视图报告/视图交互 因此,我的第一次尝试是规范化数据,但当我深入到项目中并意识到他们很少会添加/更改数据时,我认为最好从一开始就对结构进行非规范化 任何智慧的话语……未来他们可能会比今天更多地与数据交互,但它仍然不像订单系统或CRM系统 总是感激你的投入 --设计OLTP数据库的通常建议是: 然而,数据仓库或OLAP数据库的

我目前正试图为我正在从事的一个新项目设计一个数据库。我的问题源于规范化和非规范化……我想弄明白的是,你是否应该始终最大限度地规范化?数据将是用户很少修改的信息,并且最常与数据视图报告/视图交互

因此,我的第一次尝试是规范化数据,但当我深入到项目中并意识到他们很少会添加/更改数据时,我认为最好从一开始就对结构进行非规范化

任何智慧的话语……未来他们可能会比今天更多地与数据交互,但它仍然不像订单系统或CRM系统

总是感激你的投入


--设计OLTP数据库的通常建议是:

然而,数据仓库或OLAP数据库的最佳实践是将其非规范化为支持维度表(a)

因此,这取决于您对scanario的准确使用。根据您的描述,听起来您有一些更接近OLAP的东西

我会先将所有内容正常化,然后如果出现性能问题,请查看非规范化

如果您的报告涉及大量聚合,并且您应该创建索引以尝试覆盖您的查询工作负载,则可能会对您有所帮助


  • 标准化的好处:

  • 节省磁盘空间
  • 冗余数据越少,就越有可能拥有一致的数据
  • 在必要时更容易实现对架构和/或数据的更改
  • 非正常化的好处

  • 更简单的SQL查询(不需要大量连接)
  • 连接代价很高(速度很慢),使用规范化的db,您真的应该在所有连接字段上都有索引(不是说索引是一项繁重的工作)

  • 规范化和适当的设计将为您解决未来的问题。即使这个项目似乎不需要它,无论如何都要去做,以确保你有这个习惯,并得到练习

    我不得不重新编写的大多数应用程序都有问题,原因是数据库设计不好

    所以,正如这里多次提到的,尽可能地规范化,除非它真的会影响性能,即使如此,只有在有令人信服的理由去规范化的情况下。

    我总是设计为3NF(并敦促其他人这样做)。如果您遇到了特定的性能问题,那么(并且只有在那时)您才能了解恢复到非标准化数据的优点。您不能仅仅为了恢复而进行恢复,因为这会带来一系列问题

    标准化数据的意义在于避免数据中的不一致。您可以进行性能恢复,但通常必须引入“技巧”(如触发器)以确保数据一致性(C是ACID)。

    第五范式(5NF)是最优秀的数据库设计的基础,这是您应该追求的目标,除非您发现异常原因。3NF唯一的潜在优势是它保留了5NF没有的一些依赖关系。在这些(通常很少)情况下,您需要决定是否值得保留依赖关系,或者是否最好通过其他约束和业务逻辑进行规范化并强制实施依赖关系


    这个建议同样适用于数据仓库数据库。反规范化通常被用作数据集市的一种策略,但数据仓库通常应该是正常的形式。

    “正常化,直到它受伤,然后反规范化,直到它工作。”良好的建议Greg和OLTP的警告…+1所有要点。我认为你的最后两个“最初将所有内容规范化,然后在必要时考虑反规范化”和“报告视图”将对他非常有帮助。谢谢Mitch…非常有帮助。我的直觉告诉我应该走规范化的道路,但去规范化似乎太诱人了……真的很感激这些信息。索引视图:我想我需要自己去研究一下。我目前正在处理一个有2000万行的星型模式,我需要改进查询时间。棒极了的链接!(+1如果可以的话,请再说一遍)+1:“无论如何都要这样做,以确保你养成了习惯,并开始练习”(我觉得通过遵循这个建议,我学到了很多关于数据库的知识)