Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/59.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_Database_Database Schema - Fatal编程技术网

设计数据库模式(MySQL)

设计数据库模式(MySQL),mysql,database,database-schema,Mysql,Database,Database Schema,我正在实现一个数据库来存储用户的详细信息。通常我会这样创建: UserID metafield1 metafield2 metafield3 1 value11 value12 value13 2 value21 value22 value23 3 value31 value32 value33 UserID metafieldname metafieldvalue 1

我正在实现一个数据库来存储用户的详细信息。通常我会这样创建:

UserID    metafield1   metafield2   metafield3
1         value11      value12     value13
2         value21      value22     value23
3         value31      value32     value33
UserID    metafieldname   metafieldvalue
1         metafield1      value11
1         metafield2      value12
1         metafield3      value13
2         metafield1      value21
2         metafield2      value22
2         metafield3      value23
3         metafield1      value31
3         metafield2      value32
3         metafield3      value33
但看看Wordpress中的数据库,他们是这样做的:

UserID    metafield1   metafield2   metafield3
1         value11      value12     value13
2         value21      value22     value23
3         value31      value32     value33
UserID    metafieldname   metafieldvalue
1         metafield1      value11
1         metafield2      value12
1         metafield3      value13
2         metafield1      value21
2         metafield2      value22
2         metafield3      value23
3         metafield1      value31
3         metafield2      value32
3         metafield3      value33
据我所见,添加/编辑/删除新的元字段更容易。您不必更改表的结构

第二个架构中没有空单元格。但是,对于大量行,元字段的名称将占用空间

使用第二个模式进行查询是否更快

我想知道第二种方法比第一种方法有什么优势


谢谢。

第二种方法最重要的优点是,如果添加更多的元字段,则不必更改表的结构。从长远来看,这是一个巨大的优势。另外,第二种方法将简化查询语句、插入和删除语句。

查询速度取决于正在搜索的字段以及该字段是否已编制索引。还取决于表中有多少行以及列的数据类型

如果要查询其中的UserId=somevalue,则假设两种方案中的数据类型相同,则返回值的速度不会有显著差异

如果对元字段进行索引和查询,您将看到速度上的细微差异


出于优化目的,我推荐您列出的第二个。

您已经说明了优势。。。可以添加/删除/修改字段,而无需更改架构。对于具有固有动态模式的场景,这是一种常见的方法。缺点是增加了复杂性。