我只是在学习编程,我并不擅长数据库。我正在尝试制作一个大学管理网站。
所以我必须制作一个带有列的表格 - 老师,班级,时期,日期。如果一天有 5 个周期,那么每周有 30 个周期 (6X5)。如果有 10 个类,就有 300 种组合。
我需要的是独特的日期、时段和课程的组合,也就是说,它们仅作为一名教师提供结果。这样两个不同的老师就不会在同一天被分配到同一个班级的同一个时间段。
我怎样才能做出这样的安排以获得预期的结果?我使用 MySQL 作为数据库。我想把它分成更多的列,但想不通。
我只是在学习编程,我并不擅长数据库。我正在尝试制作一个大学管理网站。
所以我必须制作一个带有列的表格 - 老师,班级,时期,日期。如果一天有 5 个周期,那么每周有 30 个周期 (6X5)。如果有 10 个类,就有 300 种组合。
我需要的是独特的日期、时段和课程的组合,也就是说,它们仅作为一名教师提供结果。这样两个不同的老师就不会在同一天被分配到同一个班级的同一个时间段。
我怎样才能做出这样的安排以获得预期的结果?我使用 MySQL 作为数据库。我想把它分成更多的列,但想不通。
您可能应该从您的网络应用程序而不是数据库中控制它。因此,当您希望在特定日期/期间为老师分配课程时,如果已经上课,您应该抛出错误。
但是,您可以通过使用索引来确保这些列的唯一性,从而在代码中获得额外的保护。例如
create unique index class_idx on TABLE_NAME (class,period,day);
这将阻止您插入 2 行具有相同类别、期间、日期组合的行
在这些属性的组合上创建一个键(所谓的“复合键”)。
“键”是一个建模术语。实现它的物理约束是 PRIMARY KEY 或 UNIQUE 约束,具体取决于键是主键还是备用键(分别)。
例如:
CREATE TABLE YOUR_TABLE (
...
PRIMARY KEY (day, period, class)
);
顺便说一句,在 MySQL/InnoDB 下,主键也是一个集群键。
字段的顺序很重要——查询通常只能使用索引的前沿(在键下自动创建)。我推荐阅读使用索引,卢克!熟悉索引的结构和性能特征。
不要只创建一个 UNIQUE INDEX - 使用如上所示的适当约束。