大家好好读这个!
我真的需要通过SQL或Microsoft Access创建双向时间表数据库的帮助!我当然通过谷歌搜索完成了我的作业,但答案看起来不够清晰,并且不是很好。我也尝试制作一个ERD图并对我的数据库进行原型设计,但不幸的是我试图制作一个,但它对我没有意义,所以我最终删除了它。
所以基本上我想创建一个双向时间表,其中有第1周或第A周和第2周或B!这与网站非常相似:http://timetable2calendar.com/two-week-timetable-beta/ 我需要以某种方式检索当前日期,并确定它是否是第1周或第2周。
例如:
如果是
1/09/2014然后是第1周或A。
如果是的话 2014年9月8日那将是第2周或B。
所以这是我的桌子:
**Student:**
StudentID [PK]
Forename
Lastname
Year
Group
**Subject:**
SubjectID [PK]
Subject
Room
**Educator:**
EducatorID [PK]
Forename
Lastname
到目前为止,这是最简单的部分,但现在我遇到了我如何排序的困难部分。这是我的不良尝试,我尝试过查看模式和其他ERD图表,但他们没有找到我想要的东西。
Student Timetable:
TimetableID [PK]
StudentID [FK]
SubjectID [FK]
EducatorID [FK]
Weekday (e.g. Mon,Tue,Wed,Thu, Fri)
Period (Peroid 1 - 08:45, Peroid 2 - 09:15, Peroid 3 - 10:00 etc..)
Week (is it Week 1 or 2?)
如果有人能帮助我,我会很感激。请不要建议执行此操作的开源软件,我想为它创建一个数据库。
感谢。
答案 0 :(得分:2)
根据您的方法,您可以规范人。
你的不良尝试"走在正确的轨道上。可以通过标准化日期和添加位置来改进它。业务键(a.k.a.主键)在开始时间之前完成。
Person
PersonID [PK]
Forename
Lastname
Student
StudentID [PK]
PersonID [FK]
Year
Group
Educator
EducatorID [PK]
PersonID [FK]
Subject
SubjectID [PK]
SubjectName
Location
LocationID [PK]
Room Number
Building
Calendar
CalendarDate [PK]
DayOfWeek
WeekNumber
Timetable
SubjectID [PK][FK]
CalendarDate[PK][FK]
LocationID [PK][FK]
StudentID [PK][FK]
EducatorID [PK][FK]
StartTime [PK]
EndTime
此外,这里有一个SQL Server查询来填充Calendar表数据:
DECLARE @CalendarStartDate DATETIME, @MonthsToGenerate INT
SELECT @CalendarStartDate = '2010-01-01', @MonthsToGenerate = 60;
WITH CalendarCTE (CalendarDate,DayOfWeek,WeekNumber)
AS (
SELECT @CalendarStartDate AS CalendarDate, DATEPART(weekday,@CalendarStartDate) AS DayOfWeek , DATEPART(week,@CalendarStartDate) AS WeekNumber
UNION ALL
SELECT DATEADD(day,1,CalendarDate) AS CalendarDate, DATEPART(weekday,DATEADD(day,1,CalendarDate)) AS DayOfWeek , DATEPART(week,DATEADD(day,1,CalendarDate)) AS WeekNumber
FROM CalendarCTE
WHERE DATEADD(day,1,CalendarDate) < DATEADD(month,@MonthsToGenerate,@CalendarStartDate)
)
SELECT *
FROM CalendarCTE
OPTION (MAXRECURSION 32767)
我也把它放在SQLFiddle上。