[SQL] 데이터베이스에 "이벤트 반복"표현하는 가장 좋은 방법은 무엇입니까?
SQL데이터베이스에 "이벤트 반복"표현하는 가장 좋은 방법은 무엇입니까?
나는 중요한 요구 사항은 데이터베이스에 반복 이벤트를 표현하는 것입니다있는 C #에서 scheduler- 및 일정에 의존하는 경우 응용 프로그램을 개발하기 위해 노력하고 있습니다. 데이터베이스에 반복 이벤트를 표현하는 가장 좋은 방법은 무엇입니까?
자세한 내용은:
나는 또한 특정 사용자와 초대에 초대를 보내고 이벤트를 생성하는 것은 반드시 지정된 기간 동안 회의에 로그인 할 수 있어야하는 동안 (기간을 충족) 또는 로그인을 거부 할 수 있습니다 때 로그인 말하자면 5 분 이전에 초대 시도 회의의 일정을 시작합니다.
해결법
-
==============================
1.SQL Server의 sysjobs, sysjobsschedule 및 sysschedules 테이블이 꽤 좋은 작업을 수행합니다. 난 그냥 자신의 디자인을 복사 할 것, 바퀴를 재발견하지 않을 것입니다.
SQL Server의 sysjobs, sysjobsschedule 및 sysschedules 테이블이 꽤 좋은 작업을 수행합니다. 난 그냥 자신의 디자인을 복사 할 것, 바퀴를 재발견하지 않을 것입니다.
여기 sysschedules에서 중요한 분야 중 일부입니다
freq_type
freq_interval
freq_subday_type
freq_subday_interval
freq_relative_interval
freq_recurrence_factor
-
==============================
2.음, 재발 규칙 자체를 저장하기 위해, 당신은 RFC 5545의 버전 아래로 상처를 사용할 수있다 (그리고 난 정말 당신이 무겁게을 줄일 제안). 이외에도 당신이 원하는해야 다른 응용 프로그램에 수출에 쉽게 그것을 만들 것입니다 무엇에서.
음, 재발 규칙 자체를 저장하기 위해, 당신은 RFC 5545의 버전 아래로 상처를 사용할 수있다 (그리고 난 정말 당신이 무겁게을 줄일 제안). 이외에도 당신이 원하는해야 다른 응용 프로그램에 수출에 쉽게 그것을 만들 것입니다 무엇에서.
당신이 그 결정을 한 후에는 당신이 필요로 할 때, 데이터베이스 팀의 당신은, 당신은 반복 이벤트에 대한 각 이벤트의 발생, 또는 하나 개의 기록을 저장할지 여부를 해결하기 위해 필요로 확장합니다. 분명히 그것은 당신이 이미 확장 모든 것을 가지고 데이터베이스를 조회 할 수 상당히 쉽게 -하지만 유지하기가 까다 수 있습니다.
당신이 시험에 어려울 수 있습니다 꽤 복잡한 SQL을 작성 공상하지 않는 한 당신이 대부분의 데이터베이스 자체 상대적으로 "바보"와 쓰기를 할 것을 제안 (당신은 코너 케이스의 모든 종류의 단위 테스트를 많이 할 것) 물론, 데이터베이스에 따라 저장 프로 시저 내에서 임베드 될 수 둘 중 하나 - 자바 나 C # 같은 언어로 비즈니스 로직.
시리즈의 하나 개의 이벤트 등 시간 / 위치를 변경 - 당신이 요구할 필요가 또 다른 것은 당신이 이벤트에 대한 예외에 대처해야하는지 여부입니다
나는 (내가 ActiveSync를 통해 Google 동기화의 일정 비트의 마지막 년 작업의 대부분을 썼다)의 일정과 경험을 가지고 일이 정말 빠르게 복잡 것을 나는 당신을 경고해야한다. 당신이 "범위에서"간주 할 수있는 일이 축복입니다. 특히, 여러 시간대에 작업을해야합니까?
아, 그리고 마지막으로 - 당신이 달력 작업과 실제 연산을 수행 할 때 매우주의해야합니다. 자바를 사용하려고하는 경우보다는 Joda 시간을 사용하시기 바랍니다 내장 된 달력 / 일 수업. 그들은 당신에게 많은 도움이됩니다.
-
==============================
3.여기 허용 대답은 너무 뒤얽힌된다. 이벤트가 5 일마다 발생하는 경우, 예를 들어, 5 freq_interval에 저장되어 있지만 모든 오주 발생하면, 5는 freq_recurrence에 저장됩니다. 가장 큰 문제는 freq_interval 수단 세 가지 다른 일들이 freq_type의 값에 따라한다는 것입니다 (에 대한주의 매달 재발 월의 일상 재발, 하루 발생, 또는 일 사이의 날짜 수를 매주 또는 매월 상대). 불필요한 도움 미만인 경우 또한, 1,2,4,8 ... 형 시퀀스가 사용된다. 예를 들어, CAN freq_relative_interval 만 가능한 값 "하나"가. 드롭 다운 상자 나 라디오 버튼 타입 입력이 아닌 다수의 선택을 선택할 수있는 체크 박스 타입 입력이 라인 업. 코딩을위한, 인간의 가독성을 위해,이 순서는 ... 그런데 그냥 1,2,3,4를 사용하여 얻을 수보다 간편하고 효율적으로, 더 적합하다. 마지막으로, 대부분의 캘린더 응용 프로그램이 필요하지 않습니다 subday 간격 (이벤트는 하루에 여러 번 발생 - 모든 너무 많은 초, 분 또는 시간). 그러나 대답은 내가이 일을하고 방법에 대한 내 생각을 수정 도움을했다는 것을,이 말을하는 데. 다른 기사와 일치 내가 Outlook 일정 인터페이스와 몇 가지 다른 소스에서 보는 것과가는 혼합 한 후, 나는이 마련 :
여기 허용 대답은 너무 뒤얽힌된다. 이벤트가 5 일마다 발생하는 경우, 예를 들어, 5 freq_interval에 저장되어 있지만 모든 오주 발생하면, 5는 freq_recurrence에 저장됩니다. 가장 큰 문제는 freq_interval 수단 세 가지 다른 일들이 freq_type의 값에 따라한다는 것입니다 (에 대한주의 매달 재발 월의 일상 재발, 하루 발생, 또는 일 사이의 날짜 수를 매주 또는 매월 상대). 불필요한 도움 미만인 경우 또한, 1,2,4,8 ... 형 시퀀스가 사용된다. 예를 들어, CAN freq_relative_interval 만 가능한 값 "하나"가. 드롭 다운 상자 나 라디오 버튼 타입 입력이 아닌 다수의 선택을 선택할 수있는 체크 박스 타입 입력이 라인 업. 코딩을위한, 인간의 가독성을 위해,이 순서는 ... 그런데 그냥 1,2,3,4를 사용하여 얻을 수보다 간편하고 효율적으로, 더 적합하다. 마지막으로, 대부분의 캘린더 응용 프로그램이 필요하지 않습니다 subday 간격 (이벤트는 하루에 여러 번 발생 - 모든 너무 많은 초, 분 또는 시간). 그러나 대답은 내가이 일을하고 방법에 대한 내 생각을 수정 도움을했다는 것을,이 말을하는 데. 다른 기사와 일치 내가 Outlook 일정 인터페이스와 몇 가지 다른 소스에서 보는 것과가는 혼합 한 후, 나는이 마련 :
재발 0 = 재발하지 1 = 매일 2 = 매주 3 = 월
recurs_interval 이 재발 사이의 기간에 얼마나 많은입니다. 이벤트가 5 일마다 발생하면, 이것은 5와 이벤트가 2 주마다 다시 발생하면 재발 1.이있을 것이다, 이것은이있을 것이다 2 및 재발이있을 것이다 것입니다.
recurs_day (: 10 또는 14 예) 사용자가 매월 특정 일에 매달 타입의 재발을 선택한 경우. 이 날짜가 있습니다. 사용자가 달의 재발 매월 또는 특정 일을 선택하지 않은 경우 값은 0입니다. 값은 달리 1 ~ 31이다.
recurs_ordinal (첫째 월요일, 두 번째 목요일, 지난 금요일 예) 사용자는 매월 유형의 재발하지만, 일의 순서 타입을 선택합니다. 이것은 그 서수있을 것이다. 사용자가 재발의 유형을 선택하지 않은 경우 값은 0입니다. 1 = 제 제 2 = 3 = 세번째 4 = 네번째 5 = 마지막
recurs_weekdays 주간 및 월간 순서 재발이 저장 재발이 일어나는 평일. 1 = 일요일 2 = 월요일 4 = 화요일 8 = 수요일 16 = 목요일 32 = 금요일 64 = 토요일 그래서, 예 : 그래서, 토요일과 일요일에 매 4 주 것 재발 = 2 ==> 주간 재발 recurs_interval = 4 ==> 4 주마다 recurs_weekdays = 65 ==> (토요일 = 64 + 1 = 일요일) 사용되지 recurs_day 및 recurs_ordinal == = 0> 마찬가지로, 매월 첫 번째 금요일에 6 개월마다 것 재발 = 3 ==> 월간 재발 recurs_interval = 6 ==> 6 개월 recurs_ordinal = 1 ==> 제 발생시 recurs_weekdays = 32 ==> 금요일 다른 필드의 값에 따라 세 완전히 다른 것을 의미하는 필드를 갖는이 사업의 없음. 사물의 사용자 인터페이스 측면에서, 나는 시간, 종료 시간을 시작, 사용자가 날짜를 지정할 수 있습니다. 그들은 없음 이외의 재발의 유형을 원하는 경우 그런 다음 지정할 수 있습니다. 이 경우 중복이 함께 매일 재발 아래에는 "평일은"(이 없습니다 제외하고, 응용 프로그램은 아웃룩 옵션처럼 많이 찾고, 사용자에게 위의 물건에 필요한 옵션을 제공하기 위해 웹 페이지의 관련 섹션을 확장 모든 월 - 금 매주 재발), 어떤 연간 재발이 없습니다. 재발이있는 경우 나 또한 오늘 1 년 이내에 최종 날짜를 지정하도록 사용자에게 요구 (사용자는 그 방법을 원하고, 내 코드를 단순화) - 나는 끝없는 재발 또는 "# 후 끝을하지 않는다 # 발생. " 내 이벤트 테이블에서 사용자 선택에 이러한 필드를 저장하고, 모든 항목을 가지고있는 스케줄 표에 그를 확장합니다. 이는 충돌 감지 (I 실제로 시설 예약 응용 프로그램을하고있는 중이 야)와 개별 사건의 편집 또는 미래 발생의 리팩토링을 용이하게합니다. 내 사용자는 CST에 모두, 나는 그것에 대해 좋은 주님 감사합니다. 그것은 지금 도움이 단순화하고, 미래에 사용자 기반이 넘어 확장하려고하면, 그때는 잘 분리 작업으로, 다음에 대처하는 방법을 알아낼 수 있습니다. 최신 정보 내가 처음 쓴 이후, 나는 "주중 매일"매일 발생을 추가했다. 우리의 사용자는 다음 주 화요일 목요일 일주에서 일어나는 이벤트 만 평일 주간 재발을 사용할 수 있다는 생각에 힘든 시간을 조금했다. 그들이 그것을 할 수있는 또 다른 방법은 이미 경우에도, 그들에게이 문제를 가지고 더 직관적이었다.
-
==============================
4.그것을 구현하지만, 이러한 간단한 솔루션에 대한 내 생각이다하지 않은 있지만 나도 이것에 대해 생각하고있다.
그것을 구현하지만, 이러한 간단한 솔루션에 대한 내 생각이다하지 않은 있지만 나도 이것에 대해 생각하고있다.
반복 이벤트 먹으 렴을 설정할 때, 사용자는 "종료 날짜"를 지정하고 (되풀이 옵션에 따라) 각각에 대한 개별 이벤트를 만들 수 있습니다. 자사의 이벤트를 반복하기 때문에, 이들 각각에 대해 고유 한 "반복 ID"를 설정합니다. 이 ID는 다음 반복으로 이벤트를 표시하는 데 사용됩니다 당신은 미래의 이벤트를 변경하는 경우, 당신은 새로운 "반복 ID"로 반복 이벤트를 삭제하고 다시 만들어 향후 이벤트의 나머지 부분에 이것을 적용하는 사용자에게 메시지를 표시 할 수있는 또한 변경 이전에 사람에서이 반복 이벤트를 구별합니다.
이 차종의 감각을 희망하고 의견을 부탁합니다.
-
==============================
5.나는 데이터베이스에 두 개의 가지로 반복 이벤트를 기록합니다. 우선, 이벤트 테이블에서 각 이벤트의 모든 선두로부터 기록. 둘째, 당신이 반복 이벤트를 설정을 요구하는 사항을 기록하는 재발 테이블이있다. 시작 날짜,주기, 발행 수의 번호 등
나는 데이터베이스에 두 개의 가지로 반복 이벤트를 기록합니다. 우선, 이벤트 테이블에서 각 이벤트의 모든 선두로부터 기록. 둘째, 당신이 반복 이벤트를 설정을 요구하는 사항을 기록하는 재발 테이블이있다. 시작 날짜,주기, 발행 수의 번호 등
그런 다음 당신은 FK으로 이벤트 레코드의 각으로 재발의 PK를 넣어 모두 함께 묶는 생각할 수 있습니다. 그러나 더 나은 디자인은 이제 여러 이벤트를 참조 할 수있는 두 테이블, 이벤트 바로 베어 하나하고 세부 정보를 가지고 하나에 이벤트 테이블을 정상화하는 것입니다. 방법은 모든 이벤트 레코드를 반복하거나하지 않는 것이의 eventdetails 테이블의 PK에 FK있다. 그런 다음 eventdetails에 어딘가를 따라 등 아무것도 운전하지 않습니다 재발 기록 의제, 참석자와 재발의 PK를 기록합니다. 모든 반복 이벤트의 목록을 원하는 경우 예를 들어, 당신은 재발에 null이 아닌 FK 모든 이벤트에 대한 eventdetails 통해보고.
당신은 당신이 삽입 또는 삭제 이벤트가 때 재발 데이터가 변경 그래서,이 모든 것들을 동기화 할주의해야합니다.
-
==============================
6."이외에도 다른 어떤에서"
"이외에도 다른 어떤에서"
이 "매우 요구 사항"을 포함합니까?
"그게 쉽게 다른 응용 프로그램에 수출에 당신이 원하는해야 할 것입니다."
"다른 응용 프로그램에 캘린더를 수출하기 쉽게해야한다"명시된 요구 사항이 포함되어 있습니까? 내 인상은 문제가 단독으로 첫 번째 응용 프로그램을 구축하는 구성이었다.
즉, 내 자신의 응답했다 :
당신은 자신을 제한 할 필요가 / "recurrency"당신의 시스템이 재부의 유형에 대한 사용자 지원 할 수 있습니다. 당신 / 사용자의 희망 (들)이 사용 가능한 응용 프로그램을 끝내고 경우 또는 "아니오 제한" "위의 모든"올바른 해답이 될 수 없습니다.
from https://stackoverflow.com/questions/1579638/what-is-the-best-way-to-represent-recurring-events-in-database by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 어떻게하지 널 확인하고 SQL 서버에 빈 문자열은 아닌가하는? (0) | 2020.06.20 |
---|---|
[SQL] 어떻게 삽입 SQL 형식으로 테이블의 모든 데이터를 내보낼? (0) | 2020.06.20 |
[SQL] 어떻게 SQL을 사용하여 최근 24 시간 레코드를 선택하려면? (0) | 2020.06.20 |
[SQL] SQL 최소 순차적 일 액세스를 결정하기 위해? (0) | 2020.06.20 |
[SQL] 문자열의 UPDATE 및 REPLACE는 부분 (0) | 2020.06.19 |