mysql - sql - 单表查询与规范化

标签 mysql

考虑这些表格:

消息

+-----------+------------+----------+----------------+
| messageId | fromUserId | toUserId | messageContent |
+-----------+------------+----------+----------------+
| 1         | 1          | 2        | Hello          |
+-----------+------------+----------+----------------+

用户

+--------+----------+
| userId | userName |
+--------+----------+
| 1      | magnus   |
| 2      | fabiano  |
+--------+----------+

但是当我必须显示任何消息时,我将需要 userName ,以及消息属性。

最佳方法是什么:

  1. 添加列userName消息? (单表查询,但妥协规范化)

  2. 按照上面的方式保持规范化(并有两个表查询)

谢谢。

最佳答案

对于大多数目的,您应该保持其标准化并在查询中将表连接在一起,并且您可以创建一个为您执行连接的 View ,这样您只需查询该 View 。
从长远来看,采用标准化方法可能会解决您更新/维护数据的问题

一般来说,只有当您开始使用大型数据库和/或商业智能时,您才应该出于性能考虑而担心非规范化,因为与难度和空间使用相比,连接中可能会出现难以忍受的开销非规范化。

关于mysql - sql - 单表查询与规范化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28455201/

相关文章:

mysql - 如何更改 Google SQL Cloud 上的 innodb_lru_scan_depth 值?

java - 每个派生表都必须有自己的别名。如何在sql代码中添加别名

mysql - 插入具有未知外键但有关其他列的已知信息的行的最简单方法

phpMyadmin 无法导入文件,错误为 : open_basedir > enabled without access to the/tmp directory

mysql:从备份中恢复列的值

MySQL 在 ID 之间插入

php - 阻止虚假用户注册垃圾邮件或链接

mysql - 使用 MySQL 和 PHP 将数据分离到两个不同的数据库表中

mysql - 使用附加条件连接表

mysql query select not in 运行太慢