Mysql 带有泛型字段的大型表可以替代EAV和关系表 下面的数据库设计最糟糕的情况是什么?现在还是将来*
我正在为我的micro MF编码,我正在考虑使用下面的数据库模式。将来所有模块都将使用它。我必须使用MySQL。我保留这些理由和解释,这样就不会有人在结束这个问题时说它是“基于意见的”,就像之前发生的那样。假设这就是我手上的问题,这就是我必须使用的解决方案。也就是说:Mysql 带有泛型字段的大型表可以替代EAV和关系表 下面的数据库设计最糟糕的情况是什么?现在还是将来*,mysql,sql,database,entity-attribute-value,Mysql,Sql,Database,Entity Attribute Value,我正在为我的micro MF编码,我正在考虑使用下面的数据库模式。将来所有模块都将使用它。我必须使用MySQL。我保留这些理由和解释,这样就不会有人在结束这个问题时说它是“基于意见的”,就像之前发生的那样。假设这就是我手上的问题,这就是我必须使用的解决方案。也就是说: Main Table ------------------- primary_key data_type field1 field2 field3 field4 field5 field6 fie
Main Table
-------------------
primary_key data_type field1 field2 field3 field4 field5 field6 field7
----------- --------- ------ ------ ------ ------ ------ ------ ------
Attribute Table 1
-------------------
attribute_key1 primary_key attribute_name field1 field2 field3 field4 field5 field6 field7
-------------- ----------- -------------- ------ ------ ------ ------ ------ ------ ------
Attribute Table 2
-------------------
attribute_key2 primary_key attribute_name field1 field2 field3 field4 field5 field6 field7
-------------- ----------- -------------- ------ ------ ------ ------ ------ ------ ------
Attribute Table 3
-------------------
attribute_key3 primary_key attribute_name field1 field2 field3 field4 field5 field6 field7
-------------- ----------- -------------- ------ ------ ------ ------ ------ ------ ------
每个表的属性键可以相互引入
字段类型可以以任何适当的格式展开;也许有两个是长文的,一个是bigint,一个是tinyint,另一个是varchar
数据类型是数据类型的唯一标识符。比如说,博客帖子。primary_key是主标识的键(位于树的顶部)。属性与主标识相关,并通过主键附加到标识
作为模块开发人员将如何使用此功能的示例,使用一个粗糙而简单的示例-使用PHP:
- 定义表示数据模型并将其映射到编码器可读字段的数组: $var['models']['module\u name']['blog\u post']= 排列( 'maintable'=>数组(' ))
(模块名称、模型名称、数据id)我建议使用EAV的混合方法——将公共字段放入每个实体的表中,然后将EAV用于不常见字段 这种方法的主要缺点是数据本身不是自文档化的——您不知道它的含义。将来,这意味着您必须将所有元数据信息作为附加表进行开发,最终您将得到一个只有您才能理解的应用程序。对于常规关系表,表和列名是描述性的。使用EAV方法,属性名与值一起存储 其他不利因素:
- 无法实现索引以加快对特定元素的访问
- 属性的给定值可以位于任何列中,因此很难获得“总体视图”
- 您没有使用关系数据库的功能
- 不能在表之间定义外键关系
'primary_key' => 'post_id',
'blog_post' => 'data_type',
'title' => 'field1'
'),
'attribute_table1' => array(
'attribute_key1' => 'category_id',
'primary_key' => 'post_id',
'field1' => 'tag'
),