문제

매주, 매일 또는 월별로 구성 할 수있는 예정된 이벤트 (예 : 수업 시간과 같은)를 저장해야합니다. 예를 들어, 매주 월요일과 수요일 또는 매월 두 번째 목요일마다 행사가 발생할 수 있습니다. 이 정보를 3NF로 준수하는 RDBMS에 저장하는 방법이 있습니까?

편집 : 이것은 숙제가 아닙니다. 나는 우리 자신의 교화를 위해 친구와 무언가를 짓고 3NF로 그것을 원합니다.

구체적으로, 저는 RC 교구에서 대량 및 고백 시간 일정을 저장하려고합니다. 이것들은 X 시간에 매주 일요일 또는 다른 시간에 모든 tue/thu와 같은 많은 방법으로 예약 될 수 있습니다. 때때로 그것은 이달의 셋째 금요일에 불과하며, 다른 사람들은 일년에 한 번만 특정 시간에만 제공됩니다. 이 정보를 저장할뿐만 아니라 다음 주 또는 주 또는 무엇이든간에 사용 가능한 시간 목록을 신속하게 얻을 수 있도록 쿼리해야합니다.

엄격하게 말하는 3NF는 요구 사항이 아니라고 생각하지만, 그렇다면 우리에게는 더 쉬울 것이며 나중에 스키마를 변경하는 것보다 BAT에서 수정하는 것이 좋습니다.

도움이 되었습니까?

해결책

예, 저는 동료와 다음과 같은 방식 으로이 문제를 해결했습니다.

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 일에 끝나는 정의 된 학교 학기와 같은 단일 날짜/시간 범위는 여러 일정을 포함 할 수 있습니다 (따라서 매주 월요일 예술 수업 및 Phys Ed의 "매일"). 휴일과 주말을 고려하기위한 더 많은 일!).

다른 팁

"정기 반복"에 대한 규칙을 기록하려면 영감을 얻을 수 있습니다. 크론타 브물론 몇 분과 몇 시간에 제약이 필요하지 않고, 요일, 요일 등의 제약이 필요하지 않다는 것을 제외하고. 평일 예를 들어 주중 (예 : 1 회 이상)이 될 수 있으므로 NF 목적을 위해 많은 관계를 나타내는 데 사용되는 일반적인 중간 테이블을 원할 것입니다. 즉, 행당 두 개의 외국 키가있는 것 (하나는 이벤트의 주요 테이블에 하나씩 있습니다. , 하나는 평일의 테이블에서)-그리고 마찬가지로, 물론 한 번의 날 등.

아마도 각 예정된 이벤트에는 기간, 카테고리, 위치, 이름 또는 설명 설명이있을 것입니다.

"얼마나 정상"이 형식인가 (위에서 언급 한 많은 관계가있는 "세트"를 돌보고 나면)는 이러한 다양한 속성이 서로에 어떻게 의존하는지 여부와 방법에 따라 다릅니다. 카테고리는 동일한 기간을 가지므로 ID, 카테고리 및 지속 시간이있는 별도의 보조 테이블을 갖고 쌍을 이루는 정보를 반복하지 않고이 테이블에 이물 키를 사용하려고합니다. 그러나 당신이 말한 바에 따르면, 나는 정상 형식 규칙의 본질적인 위반을 보지 못하면 그러한 의존성 가능성을 절약하십시오 (이벤트 일정에 대해 지정하지 않은 부분에는 내재되어 있지 않음).

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top