我只是在学习编程,而且我并不擅长数据库。我正在努力建立一个大学管理网站。
因此,我必须制作一个包含列的表 - 教师,班级,期间,日期。如果每天有5个时段,那么每周有30个时段(6X5)。如果有10个班级,则有300个组合。
我需要的是将日,时期和课程结合起来是独一无二的,即他们只提供一名教师的结果。因此,两个不同的教师不会在同一天分配到同一个班级的同一时段。
我怎样才能做出这样的安排才能得到理想的结果呢?我使用MySQL作为数据库。我想把它分成更多的列,但无法弄明白。
答案 0 :(得分:2)
您应该从Web应用程序而不是数据库中控制它。因此,如果您希望在特定的日期/期间为教师分配课程,如果已经考虑了,那么您应该抛出错误。
但是,通过使用索引确保这些列的唯一性,您可以在代码中获得额外的保护级别。 e.g。
create unique index class_idx on TABLE_NAME (class,period,day);
这将阻止您插入具有相同类,期间,日期组合的2行
答案 1 :(得分:1)
在这些属性的组合上创建一个键(所谓的“复合键”)。
“关键”是一个建模术语。实现它的物理约束是PRIMARY KEY或UNIQUE约束,具体取决于密钥是主密钥还是备用密钥(分别)。
例如:
CREATE TABLE YOUR_TABLE (
...
PRIMARY KEY (day, period, class)
);
BTW,在MySQL / InnoDB下,主键也是clustering键。
字段的顺序很重要 - 查询通常只能使用索引的前沿(在密钥下自动创建)。我建议阅读Use The Index, Luke!以熟悉索引的结构和性能特征。
不要只创建一个独特的索引 - 使用如上所示的适当约束。