我正在编写我的微型MF,我正在考虑使用以下架构进行数据库。将来所有模块都将使用。我必须使用MySQL。我隐瞒了原因和解释,以便有人不会通过说它是基于意见的来解决问题,就像之前发生的那样。让我们说这就是我手中的问题,这是我必须使用的解决方案。话虽如此:
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
-------------- ----------- -------------- ------ ------ ------ ------ ------ ------ ------
每个表的属性键可以相互引入。
字段类型可以以任何适当的格式展开;也许其中有两个是longtext,其中一个是bigint,或者其中一个是tinyint,其中一个是varchar。
data_type是数据类型的唯一标识符。说,博客帖子。 primary_key是主标识的键(在树顶部)。属性与主标识相关,并通过primary_key附加到标识。
作为模块开发人员如何使用它的示例,使用简单的示例 - 使用PHP:
定义一个表达数据模型并将其映射到编码器可读字段的数组:
$ var [' models'] [' module_name'] [' blog_post'] = 阵列( ' maintable' = GT;阵列('
'primary_key' => 'post_id',
'blog_post' => 'data_type',
'title' => 'field1'
'),
'attribute_table1' => array(
'attribute_key1' => 'category_id',
'primary_key' => 'post_id',
'field1' => 'tag'
),
);
有了这个,模块开发人员定义了一个' blog_post'数据模型,包括帖子ID,标题和附加标签,跨越两个表格。属于模块' module_name'。
从那时起,如果我们说module_name是博客,那么dev需要做什么才能访问这个数据对象:
$ data_access-> GET_DATA('博客'' blog_post',POST_ID);
(模块名称,型号名称,数据ID)
答案 0 :(得分:1)
我建议使用EAV的混合方法 - 将公共字段放入每个实体的表格中,然后将EAV用于不常见的字段。
您的方法的主要缺点是数据本身不是自我记录的 - 您不知道它意味着什么。将来,这意味着您必须将所有元数据信息作为附加表进行开发,最终您将获得只有您理解的应用程序。对于常规关系表,表和列名称是描述性的。使用EAV方法,属性名称与值一起存储。
其他缺点: