2010-03-20 6 views
3

나는 달력을 구현해야하는 프로젝트에서 작업하고 있습니다. 매우 유연한 시스템을 고안하려고합니다 : 반복되는 이벤트, 반복에 대한 예외 등을 처리 할 수 ​​있습니다. iCal, Lotus Notes 및 Mozilla와 같은 응용 프로그램의 스키마를 살펴본 후 방법에 대한 아이디어를 얻었습니다. 그러한 시스템을 구현하십시오. 현재 반복되는 이벤트의 예외를 처리하는 가장 좋은 방법은 무엇인지 결정하는 데 문제가 있습니다. 나는 데이터베이스를 꽤 많이 사용했지만 실제로 모든 것을 최적화하는 데 많은 경험이 없으므로 두 가지 방법 중 어떤 방법이 전반적인 성능과 쿼리/검색 기능면에서 최적인지는 확실하지 않습니다. :반복 일정 이벤트 예외를 가장 잘 처리하는 방법

  1. 반복 이벤트 위반. 따라서 반복 이벤트에 대한 현재 행의 종료 날짜를 변경하고 예외가있는 새 행을 삽입 한 다음 이전 시퀀스를 계속하는 다른 행을 추가하십시오.
  2. 단순히 예외를 추가하십시오. 따라서 새로운 행을 재정의로 나타내는 일부 필드와 함께 추가합니다.

그래서 여기에 내가 결정할 수없는 이유가 있습니다. 방법 1은 두 번째 방법으로 하나의 행에 추가로 두 개의 추가 행이 필요하기 때문에 훨씬 많은 행이됩니다. 다른 한편으로는 이벤트를 찾는 쿼리가 훨씬 간단하고 따라서 첫 번째 메서드를 사용하는 것이 더 빠를 것이라고 생각합니다. 두 번째 방법은 응용 프로그램 서버에서 더 많은 계산을 요구하는 것처럼 보입니다. 일단 데이터를 얻으면 두 행의 교차를 제거해야하기 때문입니다. 나는 데이터베이스가 종종 웹 사이트의 병목 현상을 겪고 있음을 알고 있습니다. 여러분의 프로젝트가 효율성에있어 큰 차이를 내지 못할 것이므로 여러분 중 많은 분이 괜찮다고 생각하고 계실 것입니다. 최상의 솔루션. 어떤 방법으로 선택하겠습니까? 아니면 완전히 다른 것을 할 것입니까?

사이드 노트로 MySQL과 PHP를 사용하겠습니다. 특히 데이터베이스 영역에서이 기술에 더 적합하다고 생각되는 기술이 있다면이를 언급하십시오.

감사합니다.

답변

0

예외가있는 행을 입력하고 코드를 사용하여 반복되는 집합에서 제거하기로 결정했습니다. 내가 끝내기 전에 잠시 기다려야 하겠지만 모든 일이 끝나면 몇 가지 성과 결과를 게시하여 다시 게시하도록 노력하겠습니다.

0

이벤트는 영구적이지 않으므로 변경되거나 중단 될 수 있습니다.

이벤트의 각 날짜에 행을 삽입하고 반복 이벤트를 편집 할 때 이벤트의 모든 인스턴스를 편집하거나 하나만 편집하는 옵션을 제공해야합니다.

이렇게하면 실제로 이벤트가 활성화되어 있는지 여부를 나타내는 추가 필드 만 필요합니다.

제대로 색인을 생성하면 쿼리에서 상당한 차이가 발생하지 않습니다.

예제는 다음과 같습니다

SELECT * FROM events WHERE event_id = 123 AND active = 1; 

경우에 당신은 인덱스에 EVENT_ID 활성 열을해야 할 것입니다.

+0

정확히 무슨 뜻입니까? 반복되는 이벤트가 있지만 특정 날짜에 반복되는 것을 원하지 않기 때문입니다. 이벤트를 반복해야하는 방법에 대한 데이터를 보유하는 행은 계속 활성화되며 추가 된 예외도 활성화됩니다. 즉, 데이터베이스의 모든 행이 활성화 될 것입니다 ... 필요하지 않은 경우 삭제됩니다. – blcArmadillo

+0

활성은 해당 날짜에 이벤트가 발생한다는 것을 의미합니다 (취소되지 않았거나 일정이 변경되지 않았으며 예외가 반복되지 않음). 2010 년 6 월 19 일이 아닌 매주 토요일에 "발생"하는 이벤트가있는 경우 이벤트가 "발생"하는 매일 행을 삽입하고 해당 날짜를 비활성으로 표시합니다. 새로운 이벤트를 추가하는 대신 무언가가 변경되어 해당 날짜에 해당 이벤트가 실행되기를 원하기 때문에 삭제해서는 안됩니다. 기존 이벤트를 편집하고 해당 날짜를 활성화 할 수 있습니다. – Andre

+0

이제 알겠습니다. 나는 이벤트가 발생해야하는 매일 엔트리를 만들지는 계획하지 않았지만 내 코드가 쉽게 열거되고 일을 파악할 수있는 단일 행을 만들었습니다. 예를 들어 당신은 반복되는 이벤트가 있습니다 ... 당신은 당신의 DB에 무한 수의 행을 추가 할 수 없습니다. 나는 당신이 지금 의미 한 것을 당신에게 보게됩니다. 해명 해줘서 고마워. – blcArmadillo

관련 문제