作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在尝试为一个简单的基于 Yii 的网站创建一个数据库(使用 MySQL)。它将包含一个商品目录,商品分为几类。我们的想法是有一种方法来添加额外的字段,特定于每个类别,并且这些字段应该可以为类别中的每种商品填写。
例如,如果我有一个类别“壁纸”,它们应该有额外的字段“颜色”、“镜头”、“制作”等。当然,每个壁纸项目必须以不同方式填写这些字段。
我为它创建了一个包含 4 个表的数据库:items(显然包含项目)、items_categories(包含 therm 的类别)、items_fields(包含附加字段)和 items_fields_values(多对多关系的支持表,其中还包含相关字段的值)。
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)'),
);
ItemCategory 模型:
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
关于php - 如何在 3 个实体(项目、它们的类别和附加字段)之间创建数据库关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28645005/
我是一名优秀的程序员,十分优秀!