Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 为什么要在数据库中的不同行上存储数据?_Mysql - Fatal编程技术网

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

Mysql 为什么要在数据库中的不同行上存储数据?,mysql,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

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

比如说

  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这样的应用程序。大概有一个单独的
字段
表,可以在其中定义这些字段

如果您没有明确的需求,请不惜一切代价避免这种模式。这确实是一种你只有在没有其他选择的情况下才应该做的事情,即使这样,可能更有意义的是:

  • 仅对自定义字段执行此操作,但保持默认字段为平面
  • 可能使用一个
    JSON
    类型,然后将所有自定义数据转储到其中。它不像键->值表索引那么好

第一个表设计允许最终用户动态添加新字段。某些软件可能允许您向某些内容添加新字段。许多CMS都能做到这一点,还有像Jira这样的应用程序。大概有一个单独的
字段
表,可以在其中定义这些字段

如果您没有明确的需求,请不惜一切代价避免这种模式。这确实是一种你只有在没有其他选择的情况下才应该做的事情,即使这样,可能更有意义的是:

  • 仅对自定义字段执行此操作,但保持默认字段为平面
  • 可能使用一个
    JSON
    类型,然后将所有自定义数据转储到其中。它不像键->值表索引那么好

你是说列吗?如果人们第一次使用它,这是一种不好的做法,它甚至没有通过1NF。Wordpress正在使用第一种方法将数据存储到数据库中,这让我的生活变成了地狱。要做一件简单的事情,我必须花一天的时间来正确使用SQL,你是说列吗?如果人们第一次使用它,这是一种不好的做法,它甚至没有通过1NF。Wordpress正在使用第一种方法将数据存储到数据库中,这让我的生活变成了地狱。要做一件简单的事情,我必须花一天的时间来正确使用SQL谢谢你的回答,但是你没有解释为什么应该不惜一切代价避免使用方法2,甚至认为使用方法2时SQL查询似乎更简单、更短、更快。@PaulPatt他们说应该不惜一切代价避免使用方法1(第一个表设计),不是第二种方法。好的,我同意,第二种方法似乎更好。那么为什么像wordpress这样流行的CMS使用方法1,使得sql查询变得非常复杂呢?我描述了他们为什么这样做。。。允许用户动态添加新字段。如果不清楚,请告诉我。很乐意详细说明。这两种方法都不好。我想请你参考关于正规形式的讨论:。它包括确定数据值的原子性,然后根据是否存在诸如值的闭合枚举之类的限制进行操作。感谢您的回答,但您没有解释为什么应该不惜一切代价避免方法2,即使使用方法2时sql查询看起来更简单、更短、更快。@PaulPatt他们说的是方法1(第一表设计)应该不惜一切代价避免,而不是方法二。好吧,我同意,方法二似乎更好。那么为什么像wordpress这样流行的CMS使用方法一,使得sql查询非常复杂?我描述了他们为什么这样做…允许用户动态添加新字段。如果不清楚,请告诉我。乐意详细说明。两种方法都不是g我想让您参考一个关于范式的讨论:。它包括确定数据值的原子性,然后根据是否存在诸如值的闭合枚举之类的限制继续进行。