所以我在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]
)的标签和组的所有模型,只有一个数据透视表是一个好主意。那样我可以添加没有新数据透视表的新模型类型?或者这被认为是不好的做法?
由于
答案 0 :(得分:0)
我的2美分:你在正确的轨道上,只需要稍微调整一下。您可以将tag_group规范化为单独的表,并引用数据透视表中的id。在这种数据透视表中现在有[tag_id, shrine_id, group_id]
,如果你想让组和标签保持唯一,你可以将3列索引为主列。