ast*_*ine 6 sql rdbms database-design relational-database
我必须存储可以按周,每天或每月组织的预定事件(例如说课时).事件可能发生在每个星期一和星期三,或每月的每个星期四.有没有办法将这些信息存储在符合3NF的RDBMS中?
编辑:这不是作业; 我正和朋友一起为我们自己的教化做点什么,我们想要它在3NF.
具体来说,我正试图在RC教区存储大规模和告白时间的时间表.这些可以在很多方面安排,例如每个星期天的x时间或每个星期二/星期四的不同时间.有时它只是本月的第三个星期五,而其他只在一年一次的某个时间提供.我不仅要存储这些信息,还要查询它,以便我可以快速获得第二天或一周或其他任何时间的可用时间的完整列表.
我认为严格来说3NF并不是一个要求,但是对我们来说它会更容易,而且最好是让它更正确,而不是以后更改我们的架构.
是的,我和我的同事通过以下方式解决了这个问题:
CREATE TABLE [dbo].[Schedule](
[ID] [int] IDENTITY(1,1) NOT NULL,
[StartDate] [datetime] NOT NULL,
[EndDate] [datetime] NULL
)
CREATE TABLE [dbo].[ScheduleInterval](
[ID] [int] IDENTITY(1,1) NOT NULL,
[ScheduleID] [int] NOT NULL,
[ScheduleIntervalUnitID] [int] NOT NULL,
[Interval] [smallint] NOT NULL
)
CREATE TABLE [dbo].[ScheduleIntervalUnit](
[ID] [int] NOT NULL,
[Name] [varchar](50) NULL
)
INSERT INTO ScheduleIntervalUnit (ID, Name)
SELECT '1' AS [ID], 'Day' AS [Name] UNION ALL
SELECT '2' AS [ID], 'Week' AS [Name] UNION ALL
SELECT '3' AS [ID], 'Month' AS [Name]
Run Code Online (Sandbox Code Playgroud)
时间表跨越一定的时间长度,并且间隔发生在该时间长度内。计划间隔单位确定间隔的长度(天数,如“每隔”(2) 或“每三分之一”(3) 等)、周(一周中的某天,例如星期一、星期二等),以及(日历年的)月份。使用它,您可以对数据库进行查询和逻辑以检索时间表。
如果您的日程安排需要更好的分辨率(精确到小时、分钟、秒),请查看cron. 我最初是沿着这条路线开始的,但发现上面的方法更加简单且易于维护。
单个日期/时间跨度 - 例如从 9 月 9 日开始到 11 月 4 日结束的定义的学校学期 - 可以包含多个时间表(因此艺术课每周一,体育课“每隔一天” - 但您需要这样做考虑假期和周末需要做更多的工作!)。
| 归档时间: |
|
| 查看次数: |
2318 次 |
| 最近记录: |