设计数据库模式(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,则假设两种方案中的数据类型相同,则返回值的速度不会有显著差异 如果对元字段进行索引和查询,您将看到速度上的细微差异
出于优化目的,我推荐您列出的第二个。您已经说明了优势。。。可以添加/删除/修改字段,而无需更改架构。对于具有固有动态模式的场景,这是一种常见的方法。缺点是增加了复杂性。