2008-10-11 4 views
4

되풀이 시간 창을 저장하는 기본 방법은 무엇입니까?
예를 들면. 매일, 매주 또는 매월 반복되는 이벤트를 처리 할 수 ​​있어야하는 캘린더 시스템이 있다면 어떤 종류의 시간 관리 시스템이 가장 좋습니까?

어떻게 데이터베이스에서 가장 잘 나타 납니까?되풀이 시간 창을 저장하는 방법

자세한 내용
이 목표의 특정 목표는 열린 시간대 집합을 제공하는 것입니다. 일단 이러한 시간 윈도우가 생기면 코드는 시스템에 도착한 메시지가 시간 윈도우 중 하나에 속하는지 테스트해야합니다.

답변

1

이것은 오래 지연되었지만, 많은 테스트와 많은 애로 사항이 있었지만, 우리는이 작업을하기위한 특정 계획을 결정했습니다. 우리 시스템의 필요에 따라, 매주 경우에만 재발을 실시해야합니다. 최종 제품은 그렇게 설계 될 것입니다.

다음은 DB 스키마

id : int(10) 
window_name : varchar(100) 
start_date : datetime 
end_date : datetime 
start_time : time 
duration : int(10) 
timezone: varchar(100) 
monday : tinyint(1) 
tuesday : tinyint(1) 
... 
sunday : tinyint(1) 
  1. 각 "창을"입니다, 세트 시작 날짜, 종료 날짜를 시간과 기간을 시작하는 시간.
  2. 창은 시작 날짜에 열고 시작 시간 및 "기간"초 동안 실행됩니다
  3. 에만 특정 요일을에 열리는 창

이 창을 허용 할 수있는 유일한 시스템입니다 매주 반복되는 시간에 개폐 할 수 있으며 다음날 아침까지 계속되는 창문이 있습니다. 창문이 반복되는 복잡한 시스템이있을 것이라고 확신하지만, 우리는 유연하고 빠른 것을 찾고 있었으며 매월 반복되는 이벤트 나 매년 이벤트가 필요하지 않았습니다.

1

일정 시스템에서 지원하는 각 반복 유형별 레코드를 보관할 RecurrenceType 테이블을 만들 것입니다. CalendarEvents 테이블의 각 이벤트에는 RecurrenceType 테이블의 ID에 대한 참조가 있습니다.

그러면 다음 날짜에 현재 또는 시작 날짜가 주어질 때 계산할 비즈니스 로직을 보유 할 코드에 RecurrenceRules 객체가 있거나 다음 N 날짜를 배열로 검색합니다.

대부분의 반복 논리는 RecurrenceType 테이블의 ID를 기반으로하는 열거 형 값에서 코드화해야 할 수 있습니다. 아주 간단한 달력 시스템이 아니라면 모든 데이터를 만들 수 있다면 놀랄 것입니다.

희망이 있습니다. 흥미로운 프로젝트 인 것 같습니다.