如何在 3 个实体(项目、它们的类别和附加字段)之间创建数据库关系?

How to create a database relationship between 3 entities (items, their categories and additional fields)?

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

例如,如果我有一个类别 'wallpapers',它们应该有额外的字段 'color'、'footage'、'facture' 等。当然这些字段必须是每个墙纸项目的填充方式不同。

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

My database schema diagram (你需要至少有10声望才能附上图片).

我正在使用 Yii 框架,模型中的关系是这样描述的:

物品型号:

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

项目字段模型:

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

项目类别模型:

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

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

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

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