문제

우리는 사람들이 하루 동안 방을 예약 할 수있는시기에 대한 정보를 저장하는 시스템을 업데이트 (다시 작성)하고 있습니다. 지금 우리는 시작과 시간과 객실이 한 테이블에 제공되는 날짜를 보관하고 다른 테이블에서는 개별 약속 시간을 저장합니다.

표면적으로는 정보를 이런 식으로 저장하는 것이 논리적 인 아이디어처럼 보였지만, 시간이 지남에 따라 시스템이 무거운 부하로 나타 났을 때, 우리는이 데이터 구조가 비효율적 인 것으로 보인다는 것을 깨닫기 시작했습니다. (사용 가능한 시간 동안 모든 객실을 검색하고 객실을 이용할 수있는시기를 계산하는 데 집중적 인 작업이됩니다. 객실을 주어진 시간 동안 이용할 수있는 경우 요청 된 시간을 수용 할 수있을 정도로 오랫동안 사용 가능한 시간입니다).

우리는 시스템을보다 효율적으로 만드는 방법에 대해 서클에서 돌아 왔으며, 이에 접근하는 더 좋은 방법이 있어야한다고 생각합니다. 누구 든지이 문제를 해결하는 방법에 대한 제안이 있습니까?

도움이 되었습니까?

해결책

이 책은 시간 관리/제약과 관련된 모든 종류의 데이터베이스에 대해 영감을주고 반드시 읽어야한다는 것을 알았습니다.

SQL에서 시간 지향 데이터베이스 응용 프로그램 개발

(편집자에 의해 추가되었습니다: 온라인으로 제공됩니다 Richard Snodgrass홈페이지. 좋은 책입니다.)

다른 팁

@radu094는 당신에게 좋은 정보 소스를 지적했지만 그것을 처리하는 것은 어려울 것입니다.

끔찍한 실용적 수준에서 두 테이블이 아닌 단일 테이블로 약속과 사용 가능한 정보를 녹음하는 것을 고려 했습니까? 매일 매일 '절대 사용 가능'(사무실이 열리기 전, 사무실이 문을 닫은 후에 - 그러한 일이 발생하면), '사용 가능 - 할당 할 수있다', '이용할 수 없다'. 이 (2 개 또는) 세 클래스의 예약은 인접한 간격으로 기록됩니다 (단일 레코드의 각 간격에 대한 시작 및 종료 시간 포함).

각 객실과 각 날짜마다 '사용하지 않는'예약 세트를 만들어야합니다 ( '사용하지 않는 것'과 함께 갈 것인지 여부에 따라 세트는 하나의 '사용 가능한'레코드 일 수도 있고 조기 교대 및 초기 교대와 포함 할 수 있습니다. 늦은 교대 '절대 사용 가능한'레코드도).

그런 다음 어떤 질문을하는지 알아 내야합니다. 예를 들어:

  • T1과 T2 사이의 날 X X를 예약 할 수 있습니까?
  • T1과 T2 사이의 날에 사용할 수있는 공간이 있습니까?
  • 객실 X는 아직 몇시에 여전히 이용 가능합니까?
  • y는 몇시에 Y의 시청각 기능과 12 명을 수용 할 수있는 용량이있는 방입니까?
  • 하루의 아침에 방 X를 예약 한 사람은 누구입니까?

이것은 가능성의 작은 부분 집합 일뿐입니다. 그러나 세부 사항에주의를 기울이고주의를 기울이면 쿼리가 관리 가능해집니다. DBMS의 제약을 검증하는 것이 더 어려울 것입니다. 즉, 시간 [T1..T2)이 예약되면 다른 책은 아무도 없다 [T1+00 : 01..T2-00 : 01) 또는 다른 겹치는 기간. 보다 앨런의 간격 대수 Wikipedia 및 기타 장소에서 (이것 포함 uci.edu).

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