【问题标题】:Designing the database schema (MySQL)设计数据库模式 (MySQL)
【发布时间】:2016-01-13 04:19:35
【问题描述】:

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

UserID    metafield1   metafield2   metafield3
1         value11      value12     value13
2         value21      value22     value23
3         value31      value32     value33

但是看看 Wordpress 中的数据库,他们是这样做的:

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

据我所知,添加/编辑/删除新元字段更容易。您不必更改表的结构。

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

使用第二种模式查询是否更快?

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

谢谢。

【问题讨论】:

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

标签: mysql database database-schema


【解决方案1】:

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

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

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2011-05-10
      • 1970-01-01
      • 1970-01-01
      • 2010-10-17
      • 2011-10-10
      • 1970-01-01
      • 2018-02-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多