2017-11-29 3 views
0

의사와 그 스케줄 (사용할 수있는 시간)을 저장하고 싶습니다. 의사가 주 중 특정 요일에 의사를 사용할 수 있도록 일정을 설정할 수 있습니다 (예 : 의사는 화요일과 목요일에만 근무).여러 개의 부울 열 또는 새 테이블

날짜 범위에서 의사를 쿼리하고 특정 의사의 타이밍을 쿼리해야합니다.

내 질문은 :

은 내가 schedule_idday 열이있는 테이블 schedule_days를 만듭니다 schedules 테이블 7 부울 열을 만들거나해야한다. day 컬럼은 일주일의 7 일을 나타내는 0 - 6의 정수입니다.

어떤 구현이 읽기에 더 빠릅니까?

답변

0

제출 된 SQL이 여기에 차이를 만들었으므로 "읽기가 더 빠름"으로 질문을 제한 할 때도 여기에 "올바른"대답이 하나도 없다고 생각합니다. , 및 방법 등).

나는 미래의 범위를 생각할 것이다.

doctor_id | day_of_week 

는 클라이언트가 불가피

doctor_id | day_of_week | time_in | time_out 

를 요청합니다 어디 doctor_id | m | tu | w | th | f | sa | su은하지 않습니다 당신이 미래에 두 개의 새로운 열을 추가 할 수있다.

그러나, 읽으면 가장 중요 후 바로 주 7 일에 대한 비트 마스크를 나타내는 정수 값을 저장하는 그런

doctor_id | day_of_week_bitmask 

을 고려합니다. 그것은 TINYINT에 맞을 것이기 때문에 발자국도 작습니다. 분명히 비트 마스크를 읽는데 약간의 오버 헤드가 생기 겠지만, 컴퓨터는 그런 종류의 일로 빠릅니다.

+0

'day_of_week_bitmask'를 사용하면 월요일에 사용 가능한 모든 의사를 어떻게 쿼리 할 수 ​​있습니까? – vedant1811

+0

monday에 대한 정수 표현이 무엇이든 상관 없습니다. [이 링크를 확인하십시오] (https://technet.microsoft.com/en-us/library/ee808920.aspx) 또는 (이 질문 에서처럼)'&'(BITAND) 함수를 사용하여 올바르게 할 수 있습니다 (https : //stackoverflow.com/questions/11059182/select-users-from-mysql-database-by-privileges-bitmask). 또한 [mysql의 비트 함수에 대한 자세한 정보] (https://dev.mysql.com/doc/refman/5.7/en/bit-functions.html) – JNevill

0

doctor_id와 day가있는 별도의 테이블을 사용하십시오. 하루는 MySQL의 DAYOFWEEK 결과와 일치해야합니다. 일요일은 1, 월요일은 2입니다.

그런 다음 데이터를 쿼리하는 것이 쉬울 것입니다. 예 :

select * 
from doctors 
where doc_id in 
(
    select doc_id 
    from doc_workingdays 
    where day = dayofweek(current_date) 
); 
관련 문제