데이터베이스에 업무 시간 저장
저는 현재 업무 시간을 데이터베이스에 저장하는 가장 좋은 방법을 찾고 있습니다.
예를 들면 :
비즈니스 A의 운영 시간은 다음과 같습니다.
- 월요일 : 오전 9시-오후 5시
- 화요일 : 오전 9시-오후 5시
- 수요일 : 9am-5pm
- 목요일 : 9am-5pm
- 금요일 : 오전 9시-오후 5시
- 토요일 : 오전 9시-정오 12시
- 일요일 : 휴무
현재 다음과 유사한 데이터 모델이 있습니다.
CREATE TABLE "business_hours" (
"id" integer NOT NULL PRIMARY KEY,
"day" varchar(16) NOT NULL,
"open_time" time,
"close_time" time
)
여기서 "일"은 ORM을 통해 코드에서 요일의 선택으로 제한됩니다. 특정 일에 휴업 여부를 테스트하기 위해 open_time과 close_time이 NULL인지 확인합니다. 중간 테이블 (다 대다 관계)을 통해 비즈니스와 관련됩니다.
이 데이터베이스 체계에 대한 제안이 있습니까? 그것에 대해 뭔가 옳지 않은 것 같습니다.
전반적으로 나는 이것에 아무런 문제가 없다고 생각합니다. 외...
네이티브 프로그래밍 언어가 사용하는 번호 체계를 사용하여 (라이브러리에서) 요일을 정수로 저장합니다. 이렇게하면 데이터베이스 크기가 줄어들고 코드에서 문자열 비교가 제거됩니다.
이 테이블의 비즈니스 테이블에 외래 키를 넣을 것입니다. 그렇게하면 링크 테이블이 필요하지 않습니다.
그래서 나는 할 것이라고 생각합니다.
CREATE TABLE "business_hours" (
"id" integer NOT NULL PRIMARY KEY,
"business_id" integer NOT NULL FOREIGN KEY REFERENCES "businesses",
"day" integer NOT NULL,
"open_time" time,
"close_time" time
)
내 비즈니스 로직에서는 모든 "비즈니스" 에 최소 7 개의 "업무 시간" 이 있다는 제약 조건을 적용합니다 . ( 적어도 Jon Skeet의 말이 맞기 때문에 휴일 시간을 원할 수도 있습니다.) 비즈니스가 휴무일 동안 "업무 시간"을 그냥 두어이 제약을 완화하고 싶을 수도 있습니다.
이 스키마에서 다루지 않는 한 가지 상황은 하루에 여러 번의 개장 기간입니다. 예를 들어 현지 펍은 12 : 00 ~ 14 : 30 및 17 : 00 ~ 23 : 00에 영업합니다.
마티 네와 저녁 공연을 위해 극장 매표소가 열려있을 수도 있습니다.
이 시점에서 같은 날에 여러 항목을 가질 수 있는지 또는 같은 행에 다른 시간을 표시해야하는지 결정해야합니다.
자정을 넘는 영업 시간은 어떻습니까? 바가 19 : 00-02 : 00에 영업한다고 가정 해 보겠습니다. 개장 및 폐장 시간을 테스트하려는 시간과 비교할 수는 없습니다.
저장해야 할 대상과 실제 데이터가 어떻게 생겼는지에 따라 다릅니다.
비즈니스가 특정 시점에 열려 있는지 확인할 수 있어야하는 경우 계획된대로 계획을 쿼리하는 것이 약간 어색 할 수 있습니다. 하지만 더 중요한 것은 다음과 같습니다. 정오 휴무를 준비해야합니까?
일부 옵션은 다음과 같습니다.
- 당신이 가진 것과 같은 계획이지만 같은 날에 여러 기간을 가질 수있는 옵션이 있습니다. 점심 시간을 제공하지만 사용자에게 프레젠테이션을 위해 주어진 날짜의 영업 시간을 제공하는 쿼리를 실행하는 것은 어색합니다.
- 비트 맵 스타일 접근법; 9-5의 경우 "000000000111111110000000"입니다. 이 접근 방식의 단점은 특정 단위, 즉 전체 시간 또는 30 분 또는 실제로는 분을 선택해야한다는 것입니다. 세분화 될수록 사람이 데이터를 읽기가 더 어려워집니다. 비트 연산자를 사용하여이 값을 정수 문자열이 아닌 단일 숫자로 저장할 수 있지만 다시 한 번 가독성이 떨어집니다.
Google 데이터 마크 업이 귀하의 데이터를 인식하도록하려면 다음 지침을 따라야한다는 것을 배웠습니다.
https://schema.org/openingHours
http://schema.org/OpeningHoursSpecification 일부 비즈니스에 매우 유용한 "유효한 날짜"가 포함되어 있습니다.
https://schema.org/docs/search_results.html#q=hours
You should be fine without a primary key, unless you are allowing businesses to share the same hours with the join table - interestingly eventually you would have a finite amount of combinations; I'm not sure how many that would be :p
With one of my projects I used the columns:
[uInt]business_id, [uTinyInt]day, [char(11)]timeRange
If you want to support OpeningHoursSpecification then you'll need to add validFrom and validThrough.
Time Range is formatted like: hh:mm-hh:mm
Here's a function that parses it, you can also modify this function to parse just a single open/close, if you keep them as separate columns in the DB.
Out of my experience I would recommend that you allow multiple times within a day, allow for a way to tell if they are explicitly closed on that day, or opened 24 hours or 24/7. I had mine say that if there was a day missing in the DB then the business was closed that day.
/**
* parseTimeRange
* parses a time range in the form of
* '08:55-22:00'
* @param $timeRange 'hh:mm-hh:mm' '08:55-22:00'
* @return mixed ['hourStart'=>, 'minuteStart'=>, 'hourEnd'=>, 'minuteEnd'=>]
*/
function parseTimeRange($timeRange)
{
// no validating just parsing
preg_match('/(?P<hourStart>\d{1,2}):(?P<minuteStart>\d{2})-(?P<hourEnd>\d{1,2}):(?P<minuteEnd>\d{2})/', $timeRange, $matches);
return $matches;
}
Might think about factoring in holidays by including additional fields for month of year/day of month/week of month. Week of month has some minor subtlties "last" could for example be week 4 or 5 depending on the year.
참고URL : https://stackoverflow.com/questions/1036603/storing-business-hours-in-a-database
'IT TIP' 카테고리의 다른 글
Netbeans 프로젝트를 Maven 지원 프로젝트로 변환 (0) | 2020.10.24 |
---|---|
{before _,} {install, script} .travis.yml 옵션의 차이점은 무엇입니까? (0) | 2020.10.24 |
Sqlite에서 이미지를 blob으로 저장하는 방법 및 검색 방법? (0) | 2020.10.24 |
로그인 (인증) 요청에는 어떤 방법을 사용해야합니까? (0) | 2020.10.24 |
offsetTop 대 jQuery.offset (). top (0) | 2020.10.24 |