2012-10-09 5 views
0

위치의 시작 및 종료 시간을 DB 테이블에 저장하려고합니다. 다음 중 표 디자인이 더 이상하다고 생각합니까? 나는 MySQL 또는 어쩌면 PostgreSQL을 사용하고있다. (중요 할까?).스키마 디자인에 대한 조언

하루에 한 번 기록 하시겠습니까? (1-7 결과 반환)

id, location_id, weekday, start_time, closing_time 

또는 위치 당 레코드 하나?

id, location_id, mon_start, mon_end, tue_start, tue_end, ... ... ... sun_start, sun_end 

가장 일반적인 쿼리는 단순히이 같은 내용 (항상 전체 주)을 표시합니다 (항상 한 결과를 반환) :

Location: blablabla 
Operating Hours: 
    Monday: 8 AM to 8 PM 
    ... ... 
    Sunday: 8 AM to 12 PM 

답변

3

첫 번째 솔루션은 분명 맞습니다. 두 번째 것은 정규화되지 않았으며, 프로그램하기가 어렵고 연장 할 수 없습니다 (공휴일, 특별 시간 등).

+0

예를 들어,이 옵션을 사용하면 하루에 두 개의 영업 시간을 가질 수 있습니다. (예 : 오전 8 시부 터 오후 10 시까 지, 오후 4 시부 터 오후 6 시까 지). 다른 솔루션에서 구현해보십시오. – podiluska

+0

"day"필드는 실제로 평일 0-6 (월 - 일)입니다. 이미 이것을 반영하기 위해 질문을 편집했습니다. 나는 실제로 당신이 휴일을 위해 그것을 확장함으로써 무엇을 의미하는지 모른다. – dashmug

+0

정규화 된 형식에서는 비표준 영업일을 처리하기 위해 공휴일 (또는 시스템에 -1) 또는 기타 코드 값을 시스템에 추가하는 것이 쉽습니다. 더 많은 작업이 필요한 비정규 화 형식입니다. –

0

확실하게 첫 번째, 정규화 된 것이 더 좋으며 요일 및 아마도 뷰의 조회 테이블을 사용하여 두 번째 형식의 데이터를 쉽게 생성 할 수 있습니다.

첫 번째 포스터에서 알 수 있듯이 첫 번째 해결 방법은 휴일 등을 포함하도록 쉽게 확장 될 수 있습니다. 두 번째는 너무 유연하지 않습니다.

관련 문제