【发布时间】:2010-10-30 09:25:51
【问题描述】:
在为数据库(例如 MySQL)设计架构时,会出现是否完全规范化表的问题。
一方面连接(和外键约束等)非常慢,另一方面你会得到冗余数据和潜在的不一致。
“最后优化”是正确的方法吗?即创建一个按规范规范化的数据库,然后查看可以进行非规范化以实现最佳速度增益。
对于这种方法,我担心的是我会选择一个可能不够快的数据库设计 - 但在那个阶段重构架构(同时支持现有数据)会非常痛苦。这就是为什么我很想暂时忘记我学到的关于“正确”RDBMS 实践的所有内容,并尝试一次“平面表”方法。
这个数据库将是插入重的事实是否会影响决策?
【问题讨论】:
-
你在谈论什么应用程序会产生很大的不同。是企业价格/业务逻辑还是公共网站或其他什么?
-
@Bogdan,这是一个跟踪许多具有地理位置的对象的系统。
-
好吧,你们基本上把我吓坏了,直接回到第 5 规范化形式。那谢谢啦。不过,阅读答案仍然很有趣。
-
BCNF 应该没问题。如果您基于正确的函数依赖进行分解并且您的 PK-FK 关系缺少传递依赖,那么您可能会通过 3NF 免费获得它。
-
4NF 和 5NF 仅对 M:M 关系感兴趣。
标签: mysql database optimization rdbms database-normalization