gpt4 book ai didi

sql - 如何在 RDBMS 中表示预定事件?

转载 作者:行者123 更新时间:2023-12-04 15:28:23 25 4
gpt4 key购买 nike

我必须存储可以每周、每天或每月组织的预定事件(例如上课时间)。事件可能发生,例如,每个星期一和星期三,或每个月的第二个星期四。有没有办法将这些信息存储在符合 3NF 的 RDBMS 中?

编辑:这不是作业;我正在和一个 friend 一起为我们自己的启迪做一些东西,我们希望它在 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 日结束的定义的学校学期 - 可以包含多个时间表(因此艺术课每周一,Phys Ed“每隔一天” - 但你需要做考虑假期和周末需要更多的工作!)。

关于sql - 如何在 RDBMS 中表示预定事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1016170/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com