Mysql 将多个标记组与多个模型关联

Mysql 将多个标记组与多个模型关联,mysql,laravel,Mysql,Laravel,因此,在我的Laravel项目中,我有3个主要的模型表,用于收集五月数据库中的历史数据: 圣人 神殿 事件 我想向模型的每个实例添加标记,使其与属性相关,以便对它们进行比较。我可以使用一个“tags”表,然后可能使用3个额外的pivot表(saint_标记、sires_标记、event_标记)和相应的id来实现这一点 但是,我想在每个模型中对标记进行分组,特别是在神龛中。因此,标签将与每个模型上的特定问题/字段相关,该问题/字段可能由多组标签组成,对于神龛而言,这些标签可能是: 标记组 材

因此,在我的Laravel项目中,我有3个主要的模型表,用于收集五月数据库中的历史数据:

  • 圣人
  • 神殿
  • 事件
我想向模型的每个实例添加标记,使其与属性相关,以便对它们进行比较。我可以使用一个“tags”表,然后可能使用3个额外的pivot表(saint_标记、sires_标记、event_标记)和相应的id来实现这一点

但是,我想在每个模型中对标记进行分组,特别是在神龛中。因此,标签将与每个模型上的特定问题/字段相关,该问题/字段可能由多组标签组成,对于神龛而言,这些标签可能是:

标记组
  • 材料:石头、金、银
  • 类型:雕塑、手工制作
  • 展示:人、成人、儿童、皇室,活着
  • 神殿里的圣徒:活着,做手势,悲伤
这是一个基本示例,但正如您所看到的,alive出现在具有相同模型的两个组中,在比较数据时能够区分它所在的组非常重要

我不想只将标记存储为每个字段的字符串数组,这样我就不只是比较实例的字符串。大多数情况下,我可以向从标签表输入数据的用户建议标签,这有助于保持一致性

那么,最好如何在数据库中设置它呢?在数据透视表中有一个单独的列,比如“tag_group”可能吗?所以,
silen\u tag
可能有一个主键
[tag\u id,silen\u id,tag\u group]

此外,理想情况下,我希望能够轻松地进行扩展,这样我就可以在系统中添加不同的模型,而无需大量的附加表。因此,最好为所有型号的标签和组提供一个单独的透视表,并使用4路主键,如
[tag\u id,tag\u group,model\u id,model\u type]
。这样我就可以添加新的模型类型而不需要新的透视表了?或者这被认为是不好的做法


谢谢

我的2美分:你走对了方向,只需要稍微调整一下。您可以将标记组规范化为一个单独的表,并从透视表中引用id。在这种情况下,数据透视表现在有
[tag\u id,sicle\u id,group\u id]
,如果您想保持组和标记的唯一性,可以将这3列作为主列进行索引

我的2美分:你在正确的轨道上,只需要稍微调整一下。您可以将标记组规范化为一个单独的表,并从透视表中引用id。在这种情况下,数据透视表现在有
[tag\u id,sicle\u id,group\u id]
,如果您想保持组和标记的唯一性,可以将这3列作为主列进行索引

谢谢,这很有意义,但是当我想向数据库中添加新模型时该怎么办呢。我应该只添加新的透视表,还是应该有
model\u type
model\u id
列(例如4向主列,并删除
sicle\u id
),以便允许同一表中不同型号的任意数量的标记?或者我应该把它们都分开吗?谢谢,这很有意义,但是当我想向数据库中添加新模型时该怎么办呢。我应该只添加新的透视表,还是应该有
model\u type
model\u id
列(例如4向主列,并删除
sicle\u id
),以便允许同一表中不同型号的任意数量的标记?还是我应该把它们分开?