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

时间:2015-02-26 12:15:22

标签: mysql database-design

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

事件保存在事件表中,该事件表包含一个eventID作为主键,但我不确定如何保存它所针对的房屋/年份/主题的数据。显然,如果一个事件只是针对服用魔药的第三年赫奇帕奇,或类似的东西,我可以把它放在同一张桌子里。但是,如果事件是任何一年的赫奇帕奇(而不是任何斯莱特林等)怎么办?或者,如果所有年份,房屋和科目的所有学生都有资格参加?我是否需要一张表格,其中包含每个活动的所有年份以及一个单独的表格,以及它所针对的房屋的另一个表格?

感谢任何建议或链接。

1 个答案:

答案 0 :(得分:0)

我认为有两种方法,但你肯定需要至少一个表的关联。或者你想要非常具体,关于可能的组合或者你想要做的一般,例如:只有第三年,只有赫奇帕奇,那么这两个值的组合将只是第三年的赫奇帕奇。

我想说的是这两个选项。

1)一个包含非常具体细节的行的表:事件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)每个属性一个表(这里的分辨率不是很清楚,但你只需要为每个属性创建一行等。

可以使用以下两个表来存储所有第二年或第三年的所有hufflepuff和所有slytherin可能参加

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如果能够更准确地描述你所针对的目标,我们可以找到适合你的问题的解决方案。