将多个标签组与多个模型相关联

时间:2017-04-14 10:02:21

标签: mysql laravel

所以我在Laravel项目中有3个主模型表用于may数据库中的历史数据收集:

  • 神社
  • 活动

我想为模型的每个实例添加标签以与属性相关联,以便对它们进行比较。我可以使用“标签”来做到这一点。表格,然后可能有3个额外的数据透视表(saint_tag,shrine_tag,event_tag)以及相应的ID。

但是,我想在每个模型中对标签进行分组,尤其是神社。所以标签将与每个模型上的特定问题/字段相关,这些问题/字段可能包含几组标签,对于Shrine来说可能是:

标签组

  • 材料:石,金,银
  • 类型:雕塑,手工制作
  • 显示:人,成人,儿童,皇室成员,活着
  • 参拜靖国神社的圣人:活着,手势,悲伤

这是一个基本示例,但正如您所看到的, alive 出现在具有相同模型的两个组中,并且在比较数据时能够区分它所在的组是很重要的。< / p>

我不想将标记存储为每个字段的字符串数组,因此我不仅仅是为实例比较字符串。主要是为了向用户输入标签表中的数据建议标签,并且应该有助于保持一致性。

那么如何在数据库中进行设置呢?在数据透视表中有一个单独的列,例如&#39; tag_group&#39;也许?那么shrine_tag可能有[tag_id, shrine_id, tag_group]的主键?

另外,理想情况下,我希望能够轻松扩展,因此我可以在系统中添加不同的模型而无需额外的表。因此,对于具有4向主键(如[tag_id, tag_group, model_id, model_type])的标签和组的所有模型,只有一个数据透视表是一个好主意。那样我可以添加没有新数据透视表的新模型类型?或者这被认为是不好的做法?

由于

1 个答案:

答案 0 :(得分:0)

我的2美分:你在正确的轨道上,只需要稍微调整一下。您可以将tag_group规范化为单独的表,并引用数据透视表中的id。在这种数据透视表中现在有[tag_id, shrine_id, group_id],如果你想让组和标签保持唯一,你可以将3列索引为主列。