mySQL - 我应该反规范化吗?

标签 mysql database database-design denormalization

概述 (抱歉,它含糊不清 - 我认为如果我更详细地介绍它只会使事情复杂化)

我有三个表,表一包含一个 ID,表二包含它自己的 ID 和表一的 ID,表三包含它自己的 ID 和表二的 ID。

我思考了很久,觉得如果表三也包含相关表的id会更有效率。

-这将意味着我将不必连接三个表,我可以只查询表三(对于将经常使用的查询)

-通过仅锁定表 3 中包含表 1 中特定 ID 的行,我可以更轻松地实现预订系统。

对于任何想了解更多关于数据库布局的人,这里有更多信息 here

问题

去规范化有哪些不利因素?我见过一些人完全反对它,而另一些人则相信在正确的情况下它是一个有用的工具。 id 永远不会改变,所以除了必须两次插入相同的数据外,我没有看到任何缺点,因此它会消耗额外的空间(因为它只是 id 肯定可以忽略不计)。

最佳答案

我的建议是遵循以下一般规则:默认情况下进行规范化,然后在您发现它将解决的性能问题时进行反规范化。

我发现标准化数据和处理它的代码更容易维护,也更合乎逻辑。我不认为使用非规范化来提高性能有任何问题,但我不会推测性地应用任何性能优化,这会导致可维护性下降,直到您确定它们是必要的。

关于mySQL - 我应该反规范化吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1729191/

相关文章:

python - 如何提高 Python 上 MySQL 查询的性能

MySQL 重新安装,但 root 密码仍然存在,我忘记了

php - SQL 查询只检索一行

database - 备份/恢复 dockerized PostgreSQL 数据库

ruby-on-rails - 在 Rails 中存储/检索历史数据的技术

sql - 重构字段的外键

mysql - NewSQL 与传统优化/分片

Python/MySQL,没有错误,但数据未插入

sql - 两个数据库之间的通信

database-design - 为什么要使用散列来为大量文件创建路径名?