我必须存储可以按周,每天或每月组织的预定事件(例如说课时)。事件可能发生在每个星期一和星期三,或每月的每个星期四。有没有办法将这些信息存储在符合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] 

计划跨越一段时间,并且在该时间长度内发生间隔。计划间隔单元确定间隔的长度(天数,如“每隔一个”(2)或“每三个”(3)等),周(星期几,例如星期一,星期二等)和月份(日历年)。使用此功能,您可以对数据库执行查询和逻辑以检索计划。

如果您的日程安排需要更好的解决方案 - 小时,分钟,秒 - 请查看 cron 的Unix实现。我最初开始沿着这条路走下去,但发现上面的方法更为简单和可维护。

单个日期/时间跨度 - 例如从9月9日开始到11月4日结束的定义学校学期 - 可以包含多个时间表(因此每个星期一为Art class,而“每隔一天”为Phys Ed - 但是你'我需要做更多的工作来考虑假期和周末!)。

scroll top