我听说我的团队负责人说,在过去的一些项目中,他们不得不取消规范化,以提高查询速度.
我认为它可能与表联盟有关.
有更多的精益表真的没有脂肪表少吗?
它取决于...连接表本质上比一个大表"预加入"即非标准化要慢.但是,通过非规范化,您将创建数据重复,并且您的表将变得更大.规范化被认为是一件好事,因为它创建了可以回答"任何"问题的数据库,如果正确完成,您可以构建一个选择来获取数据.在某些其他形式的数据库中情况并非如此,现在(大多数情况下)是历史性的无关紧要,标准化/关系数据库赢得了这场战斗.
回到你的问题,使用去规范化使事情变得更快是一种公认的技术.通常最好运行您的数据库一段时间,这样您就知道要取消规范化的内容以及单独留下什么,并且将数据保持为"正确"的规范化形式并将数据拉入一组非规范化报告中也很常见桌子定期.如果该过程是作为报告运行本身的一部分完成的,那么数据也始终是最新的.
作为过度规范化的一个例子,我曾经看过过去的数据库,一周的日子和一年中的几个月被分成不同的表 - 日期本身已经标准化 - 你可以走得太远.
您应该对OLTP(在线事务处理)和OLAP(在线分析处理)数据库之间的差异进行一些研究.
简而言之,主要关注记录事务(OLTP)的数据库系统通常以更标准化的方式构造,减少数据重复并且以优化数据检索为代价简化记录的创建和更新.
更关注数据检索和分析(OLAP)的数据库系统通常以较不规范的方式构建,牺牲数据存储优化以最大化查询和分析速度.
数据库规范化和非规范化是这种权衡的核心.