我注意到有些人将相关数据存储在数据库中的不同行上,而有些人则将相关数据放在同一行上。
例如
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语句会非常快速地变得非常复杂。虽然第二种方法非常简单直接。
我想知道是否有人知道人们为什么继续使用第一种方法,以及是否有一种我无法看到的优势。
由于
答案 0 :(得分:2)
第一个表设计允许最终用户动态添加新字段。某些软件可能允许您向某些内容添加新字段。很多CMS都是这样做的,还有像Jira这样的应用程序。据推测,有一个单独的fields
表,可以定义这些表。
如果您没有明确需要,请不惜一切代价避免这种模式。如果您没有其他选择,那么您应该只做这种事情,即便如此,它可能更有意义:
JSON
类型,然后将所有自定义数据转储到那里。它不像key->值表索引那么好。