需要所有组合时的主 - 细节关系的最佳实践

时间:2014-11-10 19:14:20

标签: mysql database-design

我需要了解以下情况的最佳做法:

1)学校可以有多个班级(成绩) 2)学校可以有多个活动 3)活动与最少一个班级有关,或者可以是所有学校活动(即适用于学校的所有班级)

我有典型的表格结构 事件表(用于存储事件),Class(用于存储类)和event_class(关联表)

1)当事件与类
相关联时,我在'event_class'表中插入一行 2)如果是学校活动那么,假设学校有20个班级,我在'event_class'表中插入20条记录

理论上我知道上面的内容是正确的并且可行。

我的问题是:如果没有课程从20增加到<&gt ;;什么应该是方法?如果是全校活动那么我应该只在标题级别存储一个标志并使用左/右连接来获取事件列表?我试图了解通常的做法。

提前致谢
MANISHA

1 个答案:

答案 0 :(得分:0)

我不知道这是否算作“最佳”和“最佳”。练习,但我确实在野外看到了很多,因此至少可能是好的'实践。

事件表应该有'类型'列 - 由您定义,可以是数字或文字('类'或' school',0或1等)。然后,event_class表中只有类型为' class'的事件的条目。

检索class_id的特定于类的数据时,您的连接逻辑将如下所示:

SELECT * FROM event, event_class
WHERE event_class.class_id = this_class.id
    AND event.type = 'class'
    AND event.id = event_class.event_id

如果您想要class_id的所有课程和学校活动数据,它将如下所示:

SELECT * FROM event, event_class
WHERE (event_class.class_id = this_class.id
    AND event.type = 'class'
    AND event.id = event_class.event_id)
OR event.type = 'school'

注意第二个括号,以确保布尔逻辑正常工作。这些都没有经过考验我害怕 - 只是一个想法。有可能是优化连接的方法,但对于20个类,它可能不值得付出努力。