如何在3个实体(项目,其类别和其他字段)之间创建数据库关系?

时间:2015-02-21 11:02:25

标签: php mysql database yii relationship

我试图为一个简单的基于Yii的网站创建一个数据库(使用MySQL)。它将包含一个带有商品的目录,这些商品分为几个类别。我们的想法是提供一种方法来添加特定于每个类别的其他字段,并且这些字段应该可以为类别中的每个商品填写。

例如,如果我有一个类别'壁纸',他们应该有其他字段' color','镜头'' facture&#39 ;当然,对于每个壁纸项目,这些字段必须以不同方式填充。

我为它创建了一个包含4个表的数据库: items (显然包含项目), items_categories (包含therm的类别), items_fields (包含其他字段)和 items_fields_values (多对多关系的支持表,其中还包含相关字段的值)。

My database schema diagram (您需要至少有10个附加图片的声誉)

我使用Yii Framework,并以这种方式描述模型中的关系:

物品型号:

return array(
        'category' => array(self::BELONGS_TO, 'ItemCategory', 'category_id'),
        'fields' => array(self::MANY_MANY, 'ItemField', 'items_fields_values(item_id, field_id)'),
    );

ItemField模型:

return array(
            'itemCategory' => array(self::BELONGS_TO, 'ItemCategory', 'item_category_id'),
            'items' => array(self::MANY_MANY, 'Item', 'items_fields_values(field_id, item_id)'),
        );

ItemCategory模型:

return array(
            'items' => array(self::HAS_MANY, 'Item', 'category_id'),
            'itemsFields' => array(self::HAS_MANY, 'ItemField', 'item_category_id'),
        );

我应该如何定义这些关系,以便能够输出,添加和编辑类别及其值到特定项目的字段?

1 个答案:

答案 0 :(得分:0)

您所描述的是EAV数据模型(实体 - 属性 - 值)。

扩展程序可能会解决您访问数据的问题。看看https://github.com/yiiext/eav-behavior