我注意到有些人将相关数据存储在数据库的不同行上,而有些人将相关数据放在同一行上。
例如
id user_id field_id value
1 1 9 "name 1"
2 1 10 "address 1"
3 1 11 "phone 1"
4 2 9 "name 2"
5 2 10 "address 2"
6 2 11 "phone 2"
对比
id user_id name address phone
1 1 name 1 address 1 phone 1
2 2 name 2 address 2 phone 2
这里您可以看到两种存储用户 1 和用户 2 数据的方法。我不知道为什么使用第一种方法而不是第二种方法。
我遇到一些数据库使用第一种方法,如果你想做一件简单的事情,SQL语句很快就会变得非常复杂。而第二种方法非常简单直接。
我想知道是否有人知道为什么人们继续使用第一种方法,以及是否有我看不到的优点。
谢谢
最佳答案
第一个表设计允许最终用户动态添加新字段。某些软件可能允许您向某些内容添加新字段。许多 CMS 以及 Jira 等应用程序都这样做。大概有一个单独的 fields
表可以在其中定义这些字段。
如果您没有明确的需求,请不惜一切代价避免这种模式。这确实是一种只有在别无选择的情况下才应该做的事情,即使这样也可能更有意义:
- 仅对自定义字段执行此操作,但保持默认字段平坦
- 也许可以使用
JSON
类型,然后将所有自定义数据转储到其中。它不像键->值表索引很好。
关于mysql - 为什么将数据存储在数据库的不同行上?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48895912/