如何构建 MySQL 表,其中一个字段可以包含多个值(但也可能不包含)?

How do I structure MySQL tables where one field could contain multiple values (but might not)?

我正在设计一个网络应用程序,允许用户参加活动并搜索特定类型的活动。 例如,假设这些事件发生在霍格沃茨。学生有自己的 table,其中他们的学生 ID 作为主键,这也包含他们属于哪个学院(其中有 4 个学院)、他们选修的科目以及他们学习的年份在(例如 1 或 4 或 5 等)中。这些活动可以面向所有学生,特别是拉文克劳学院的四年级学生,或者介于两者之间的任何地方。

事件保存在事件 table 中,其中包含一个 eventID 作为主键,但我不确定如何保存它所针对的 house/year/subject 的数据。显然,如果某项活动仅针对学习魔药的三年级赫奇帕奇或类似的特定内容,我可以将其保留在同一 table 内。但是,如果事件是针对任何一年的赫奇帕奇(而不是任何斯莱特林等)怎么办?或者,如果所有年级、学院和科目的所有学生都有资格参加?我是否需要一个 table 来保存每个事件的所有年份,一个单独的 table 用于它所对应的房屋,另一个单独的 table 用于它所针对的主题?

欢迎提供任何建议或链接。

我认为有两种方法,但您绝对还需要至少一种 table 用于关联。要么你想要非常具体,关于可能的组合,要么你想要笼统地做,比如:只有三年级,只有赫奇帕奇,那么这两个值的组合将只有三年级的赫奇帕奇。

我想说的就是这两个选项。

1) 一个 table 包含具有非常具体 details:Event ID 的行和所有可能选项的显式组合(这里你将有很多行)

这意味着该事件可以与二年级和三年级的赫奇帕奇相关联,但只能与二年级的斯莱特林相关联。

association_id event_id   year_id   house_id     subject_id
1              1           second    hufflepuff   potions
2              1           third     hufflepuff   potions
3              1           second    slytherin    potions

2) 每个 属性 一个 table (这里的区别不是很清楚,但你只需要每个 属性 等创建一行

下面两个table可以用来存储所有二年级或三年级的赫奇帕奇和所有斯莱特林可能参加

association_id event_id year_id
1              1        second
2              1        third

association_id event_id house_id
1              1        hufflepuff
2              1        slytherin

这是否回答了您的问题或至少帮助您找到了解决方案?

Mybe 如果你能更详细地描述你的目标,我们可以一起找到解决问题的方法table。