我现在正在玩数据库的想法。它可能不会以任何方式部署,更多的是一种学习体验。
它旨在简化我就读的大学中大量课程的导师信息的收集和处理。我在一个办公室兼职,该办公室每学期为几节课安排辅导员。
我有很多问题,但目前给我带来问题的一个问题是我如何存储每个导师的可用性。我目前正在考虑 3 个选项,并且我正在从技术角度寻找关于每个选项的优缺点的反馈。
背景: 导师信息存储在“导师”表中(导师ID引用此),必须能够调用以前的可用性。导师的可用性是离散的(每小时),并且在整个学期中保持不变。
选项1:
Table: Availability
+-----------+---------+-------+-------+---+---+---+----+---+
| avID (PK) | tutorID | year | sem | M | T | W | Th | F |
| | | (int) | (int) | (all strings) |
+-----------+---------+-------+-------+---+---+---+----+---+
在此表中,可用性存储在一个字符串中(08、09、10、13、14 代表上午 8 点、上午 9 点、上午 10 点、下午 1 点和下午 2 点)。
数据可以被回收
SELECT * FROM Availability WHERE tutorID=0001 AND year=2013 AND sem=1
看看谁有空
SELECT * FROM Availability WHERE AND year=2013 AND sem=1 AND M LIKE '%08%'
选项 2:
Table: Availability
+-----------+---------+-------+-------+--------------+
| avID (PK) | tutorID | year | sem | availability |
| | | (int) | (int) | (set) |
+-----------+---------+-------+-------+--------------+
在此布局中,可用性列作为 SET 数据类型存储在 mysql 中,选项是周一到周五的每个组合以及从 8 到 4 的每个时间(M08、M09...Th14、F16 等)。这可以得出 45 个可接受的值。这是我目前倾向于的一种,但我对 SET 数据类型了解不多。
数据可以被回收
SELECT * FROM Availability WHERE tutorID=0001 AND year=2013 AND sem=1
看看谁有空
SELECT * FROM Availability WHERE AND year=2013 AND sem=1
AND FIND_IN_SET('M09',availability) > 0
选项 3:
Table: Availability
+-----------+---------+-------+-------+-------+-------+
| avID (PK) | tutorID | year | sem | day | time |
| | | (int) | (int) | (int) | (int) |
+-----------+---------+-------+-------+-------+-------+
在此选项中,每个导师每年和每个时间段都有一行。
数据可以被回收
SELECT * FROM Availability WHERE year=2013 AND sem=2 AND tutorID=0001
可用性与
SELECT * FROM Availability WHERE year=2013 AND sem=2 AND day=3 AND time=14
无论如何...感谢您阅读所有这些内容。希望有人能够对此有所了解。我认为它基本上可以归结为最佳实践类型的问题。除非有什么我完全错过了!!