我想创建一个在MySQL中的类的时间表。列是一周的日子,行是时间间隔(即7:00 - 8:00)。我也试图有30分钟的时间间隔,当某个特定主题是2小时时,它将跨越4行。每个单元格包含课程和房间的名称。这是我试图发展的一个小程序的一部分。到目前为止,我知道要插入哪些数据,但我坚持创建正确的数据库模式。真的需要关于如何让这个开始的逻辑(即我应该使用哪些数据类型)。谢谢!这个数据库模式和逻辑
回答
请问这个声音:
CREATE TABLE TimeTable (
ID int(8) NOT NULL AUTO_INCREMENT,
Subject varchar(32) NOT NULL,
Room varchar(8) NOT NULL,
StartTime datetime NOT NULL,
EndTime datetime NOT NULL,
Day enum('Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday') NOT NULL,
PRIMARY KEY (ID)
);
你只存储有关数据这个科目。
您提到的其他内容实际上取决于您用来输出数据的任何语言。你不能真的把时间间隔放在数据库中间。正如Damien_The_Unbeliever所说,数据库并不完全是电子表格。
希望这是有道理的。
你可以有一个复合主键而不是'ID'字段:'(StartTime,Day)'。 –
是的,你说得对。我试图用HTML输出时间表,我认为它足够灵活来处理这种表格。谢谢! – JKTA
@Cobra_Fast很好的+1,但作为一个侧面说明这个PRIMARY KEY是每个记录12或13个字节大。如果您使用存储引擎InnoDB,它会将固定索引(本例中为PRIMARY KEY)数据添加到每个二级索引。这也是为什么InnoDB查找二级索引和MyISAM更快的原因,但它需要更多的磁盘空间和更大的缓冲池。 –
您可以为一天设置一列(您可以设置从1到7的天数),一列用于开始时间,一列用于结束时间。这样你的查询将变得更加简单。
例子:
Day | Start | Finish
-----------------------------
1 8:30 12:00
1 13:00 15:00
这也会派上用场,当你不想坚持了30分钟。
列是星期几,并且各行时间间隔(即7:00 - 8:00)
这是一个糟糕的开局。您的专栏应该是单个课程的属性,并且您的行应该在整个星期内成为所有不同的课程。
你列可能是Day of Week
,Lesson of Day
,Duration
,Subject
,Room
,Teacher
,等等。在这个例子中,你的主键是(Day of Week, Lesson of Day)
。
这样,如果您想要某个特定日子的日程安排,您只需选择一切与Day of Week = 2
以获得周二的日程安排。
每个单元格包含课程和房间的名称。
这也违反了规范化的规律。每个“单元格”应始终具有不超过一个值。
真的需要如何得到这个开始(即我应该用什么数据类型)
用最直观的类型的逻辑。当存储了一些选择integer
,当存储几个字符选择varchar(n)
,使用大量文字时使用text
等等...
感谢您的想法。 '我的意思是'列是一周的日子......'是可以使用HTML完成的显示。这不一定是MySQL表格的格式。对不起,如果问题很混乱。 – JKTA
我会以这种方式创建它,并在此处进行规范化处理,并为进一步扩展此应用程序提供更多机会。 表(属性):
timeslots(id, start_time, end_time)
subjects(id, name)
timetable(timeslot_id, subject_id)
链接表是不必要的。时间段中没有足够的变化来证明这些使用的合理性。 – ninty9notout
但是,在这种使用情况下,可能没有必要使用更复杂的用例,但1表数据库(电子表格样式)可能不够用。这只是为了迎合未来的扩张,它现在可能不是最好的。 – Jianhong
- 1. 多页形式和数据库逻辑?
- 2. 如何在数据库中建模数据和逻辑?
- 3. 需要验证数据库逻辑模式,以第三范式
- 4. BLL逻辑 - 数据访问模式
- 5. 实体框架和数据库逻辑
- 6. 数据库表结构和逻辑
- 7. 标题,逻辑和数据库
- 8. 逻辑在数据库
- 9. mysql数据库逻辑
- 10. 数据库逻辑建议
- 11. NOARCHIVELOG模式下的逻辑备用数据库(Oracle 12C数据库)
- 12. 在逻辑数据模型
- 13. 用户数据库逻辑个成就
- 14. Flashcard语言项目的数据库模式/逻辑
- 15. 如何到这个数据库模式?
- 16. 模型逻辑和服务层逻辑
- 17. 关系数据库模式的PHP/MySQL搜索代码和逻辑
- 18. 数据库(逻辑数据模型)的继承示例
- 19. 多个数据库与具有逻辑分区数据的单个数据库
- 20. 我想知道在这段代码的模式和逻辑
- 21. 开源模糊逻辑库
- 22. 解决一个JavaScript和数据库表逻辑的情况
- 23. Android SQLite和游戏模式逻辑
- 24. 访客模式和逻辑操作
- 25. Django - 后端逻辑vs数据库逻辑
- 26. 程序逻辑是否应该强化数据库逻辑?
- 27. 数据库逻辑进出数据库的最佳做法。在数据库中保存逻辑?
- 28. 将逻辑数据模型转换为XML模式
- 29. Node.js模式匹配逻辑
- 30. 逻辑'或'在Lua模式?
数据库表不是电子表格。星期一7:00-8:00之间可存储的内容与星期五7:00-8:00存储的内容之间没有任何区别。两个项目都应该存储在同一列中。这将指向一列存储日期和另一存储时间跨度,并且最后一列存储“在该时间段内当天发生的事情”。 –
@Damien_The_Unbeliever我已经完成了用上面提到的那个数据库设计插入所有的数据。然后我试图用HTML显示时间表格式的数据。 – JKTA