为什么要将数据存储在数据库中的不同行上?

时间:2018-02-20 23:33:20

标签: mysql

我注意到有些人将相关数据存储在数据库中的不同行上,而有些人则将相关数据放在同一行上。

例如

  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语句会非常快速地变得非常复杂。虽然第二种方法非常简单直接。

我想知道是否有人知道人们为什么继续使用第一种方法,以及是否有一种我无法看到的优势。

由于

1 个答案:

答案 0 :(得分:2)

第一个表设计允许最终用户动态添加新字段。某些软件可能允许您向某些内容添加新字段。很多CMS都是这样做的,还有像Jira这样的应用程序。据推测,有一个单独的fields表,可以定义这些表。

如果您没有明确需要,请不惜一切代价避免这种模式。如果您没有其他选择,那么您应该只做这种事情,即便如此,它可能更有意义:

  • 仅对自定义字段执行此操作,但保留默认字段
  • 也许使用JSON类型,然后将所有自定义数据转储到那里。它不像key->值表索引那么好。