当前位置: 首页 > 面试题库 >

如何在RDBMS中表示计划的事件?

鲍建业
2023-03-14
问题内容

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

编辑:这不是功课;我正在和一个朋友一起为我们自己的教育建立一些东西,我们希望在3NF中使用它。

具体来说,我正在尝试在RC教区存储群众和认罪时间的时间表。可以通过多种方式安排这些时间,例如,每个x时间的星期日或不同时间的每个周二/周四。有时仅是一个月的第三个星期五,而其他每年仅在某个时间提供一次。我不仅需要存储此信息,还需要对其进行查询,以便可以快速获取第二天或下一周或其他任何时间的可用时间的完整列表。

我想严格说来3NF不是必需的,但是对我们而言,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)等天),周(一周中的一天,例如星期一,星期二等)以及月份(日历年的月份)。使用此功能,您可以对数据库进行查询和逻辑以检索计划。

如果您的日程安排需要更好的解决方案-
数小时,数分钟,数秒,请查看的Unix实现cron。我最初是从那条路线开始的,但是发现以上方法是一种更为简单和可维护的方法。

一个单一的日期/时间跨度(例如,从9月9日开始到11月4日结束的定义的学期)可以包含多个时间表(因此,美术课的每个星期一,物理教育的“隔日”),但是您需要这样做考虑假期和周末需要做更多的工作!)。



 类似资料:
  • 我有一个spring boot应用程序,我需要每20秒刷新一次,所以我创建了这个: 它工作得很好,但当我向数据库中添加行时,在它为空之前,我想再次将计时器重置为20秒,有办法吗?

  • 我写了一个cron表达式如下: 0 13 * * 1-5代码 触发“周一至周五每周一天13:00” 但是当我在cloud dwatch事件中使用它时,我用替换了当月的一天,如aws文档中所述。但是这不起作用,并且说 我错过了什么? 谢谢你!

  • 谁能给我一个例子,说明如何使用Spring Boot1.4.2.Release在计划任务中调用DB事务?非常感谢。 我使用Spring Boot 1.4.2.Release通过创建了一个计划任务,并使用获得了的一个实例。 它可以返回select SQL的结果,但不能将实体保存到数据库。 如果我在自己的JpaRepository中创建自己的update方法,而不是调用save()方法,则会导致以下错

  • 本文向大家介绍如何在Oracle中显示SQL执行进度和执行计划?,包括了如何在Oracle中显示SQL执行进度和执行计划?的使用技巧和注意事项,需要的朋友参考一下 问题: 您想查看Oracle SQL在SQL执行计划中花费时间的位置。 解 使用Oracle 11g版本,我们可以在SQL运行时查看SQL执行计划的进度。“ V $SQL_PLAN_MONITOR”视图为SQL语句的执行计划的每个步骤包

  • 我是新的詹金斯,我有一个詹金斯的工作,有两个配置文件。我想定期安排这项工作,例如第一个配置文件运行在晚上8点,第二个在晚上10点。请指教。

  • Software developers don’t really like to make schedules. Usually, they try to get away without one. “It’ll be done when it’s done!” they say, expecting that such a brave, funny zinger will reduce thei