2014-04-22 4 views
0

주차 공간을 예약 할 수있는 주차 예약 시스템을 구현 중입니다.날짜와 시간이 포함 된 주차 예약 예약 문의

예약 테이블

columns 
-------------- 
parkingSpaceId 
VehicleId 
UserId 
startDate 
startTime 
EndDate 
EndTime 

공간 테이블

columns 
-------- 
avialableSpaces 
noOfBookings 

사용자 매개 변수 startDate, startTime, EndDate, EndTime 사용할 주차 공간을 확인할 수 있습니다.

if avialableSpaces==noOfBookings 다음 주차 공간을 사용할 수 없습니다.

주차 공간이 startDate, StartTime 및 EndDate, EndTime 사이에 있는지 알아 보는 방법은 무엇입니까?

+0

참고 –

답변

0

특정 시간에 이용 가능한 주차장의 수를 얻으려면 지정된 시간이 시작되거나 끝나는 예약 시간이없는 parkingSpaceIds를 요청하십시오.

현재 : 왜 테이블에 날짜와 시간을 나눕니 까? 이것에 대한 유일한 이유는 내가 생각할 수있는 것입니다. 시간이 지정되지 않은 날 (기본 시간과 관련 없음). 이 경우 위의 선택을 고려해야합니다. 그렇지 않은 경우 테이블 디자인을 변경해야합니다.

EDIT : 예약 테이블에 parkingSpaceId가 있으므로 주차 공간 당 기록이있는 주차 공간 테이블이 있다고 가정합니다. 여기에 가능한 진술이 있습니다. 구문이 어떻게 정확하게 보일지는 dbms에 달려 있습니다. 오라클의 AddTime 함수를 사용하여 날짜와 시간을 결합하여보다 쉽게 ​​비교할 수 있습니다. 별도의 날짜와 시간 필드를 사용하여 작업해야하는 경우에는 항상 친절해야하며, 그 중 하나가 nullable 인 경우 - 분할의 유일한 이유는 더 복잡합니다. 그에 따라 명세서를 조정해야합니다. 그것은 "availableSpaces"가 아닌 "avialableSpaces"인 것을

select parkingspaceid 
from parkingspaces s 
where not exists 
(
    select * 
    from reservations r 
    where r.parkingspaceid = s.id 
    and 
    (
    ( 
     addtime(:startdate,:starttime) >= addtime(r.startdate,r.starttime) 
     and 
     addtime(:startdate,:starttime) < addtime(r.enddate,r.endtime) 
    ) 
    or 
    ( 
     addtime(:enddate,:endtime) >= addtime(r.startdate,r.starttime) 
     and 
     addtime(:enddate,:endtime) < addtime(r.enddate,r.endtime) 
    ) 
) 
); 
+0

예 내 요구 사항은 내가 비교하는 방법이 주차 공간이 stratDate startTime을, 종료 날짜 사이를 사용할 수 있는지 내가하지 않았다 날짜와 번엔를 분할하는 것입니다 EndTime.as 주차 공간에는 사용 가능한 공간이 없으므로 사용자는 시간 단위로 예약 할 수도 있습니다. – Wasfa

+0

음, 오해 일 수도 있습니다. 어디 보자 ... 내가 금요일에 10 시부 터 11 시까 지 parkingSpaceId 123을 사용할 수 있는지 알고 싶으면, 그 시간을 포함하는 예약을 찾는다. 9 시부 터 10시 30 분까지 예약을하면 그 장소는 원하는 시간에 (부분적으로) 예약되어 있으므로 사용할 수 없습니다. 내 시작 시간 10:00이 9:00부터 10:30까지이므로 그래서이 메소드는 각각의 parkingSpaceId에 대해 시작일과 종료일 중 어느 것이 든 존재 범위가 존재하지 않거나 존재하지 않는지보기위한 것입니다. –

+0

예약은 매시간 basis.can 당신이 내 이해를 위해 SQL 쿼리를 써주세요. – Wasfa