이 설계는 MongoDB 또는 관계형 데이터베이스에서 각각의 장점과 약점을 모두 충족시킬 수 있습니다. user641887에 의한 스키마 디자인은 MongoDB에 대한 완전한 접근법입니다. 비록 같은 날에 두 명의 직원이 같은 "_id"를 가질 것이므로 "_id"를 "_id"로 사용하지는 않을 것입니다. Object_id의 참석자 "_id"를 남겨 둡니다. 그러나 Mongo-3.2에서만 추가 된 '$ lookup'함수 (https://docs.mongodb.com/manual/reference/operator/aggregation/lookup/)를 살펴볼 필요가 있으므로 콜렉션 조인을 사용하는 mongo의 한계에 대해 알고 있어야합니다. mongo 디자인의 발전은 user641887이 제안한 출석 테이블의 각 문서를 동적으로 허용하고이 데이터베이스가 매우 커야 만 데이터베이스를 확장하는 것이 어렵지 않아야한다는 것입니다.그러나 1 일 1 회 입국 (50 * 365 = 18250/년)의 직원이 50 명뿐이라면 10 년 동안의 데이터조차도 매우 적다는 점에서 우려 할 것입니다.
위의 요구 사항은 user641887에 설명 된 것처럼 2 개의 테이블을 다시 갖는 관계형 구조를 사용하여 얻을 수도 있습니다. "다른 속성/매개 변수"에 저장하려는 추가 정보 조각의 수에 따라 몇 가지 옵션이 있습니다. 가능한 다른 속성이 몇 개 밖에 없다면 각 테이블에 몇 개의 null 입력 가능 필드를 추가 할 수 있습니다. 많은 분야가있는 경우 그러나 이는 존재할 수 또는 당신은, 당신은 직원과 관련된 두 개의 추가 테이블을 가질 수 있습니다 당신이 그들을 추가하기 전에 무엇을 기대해야하는지 모르겠어요
employee_attributes :
- 직원 _id 값 : employee 테이블 직원 _id 일치 _id 코드
- attribute_code (아래) code_description 테이블
- ATTRIBUTE_VALUE에 링크 정수 번호 : 속성 값
,
참고 : 단일 속성 테이블을 사용하는이 방법은 하나의 데이터 유형 (가장 가능성이 높은 문자열) 만있는 attribute_value로 제한되지만 여러 데이터 유형이 필요할 경우 각 데이터에 대해 여러 직원 속성 테이블을 사용하여 해결할 수 있습니다 유형, 예 employee_attribute_i (ints의 경우), employee_attribute_s (문자열의 경우), employee_attribute_b (부울 값의 경우).
attribute_code_description :
- attribute_code :이 속성
- attribute_meaning의 INT 코드 :이 속성 (예 : "알레르기", "집행 유예", "START_TIME"에 대한 무엇의 캐릭터 설명 ..)
"다른 출석 매개 변수"와 동일한 접근 방식을 사용할 수 있습니다.
"각 직원의 늦은 출석 계산"과 관련하여 트리거/규칙을 자동으로 설정하여 각 직원이 늦은 지 모니터링 할 수있는 카운터에 추가 할 수 있습니다. 이것은 참석자 테이블에 삽입 할 때 트리거를 발사하여 작동합니다. 여기서 in_time 필드는 직원 "start_time"과 비교할 수 있습니다.이 값이 클 경우, 얼마나 자주 늦은지를 기록하는 카운터에 +1합니다. 나는 그것이 여러 관계형 데이터베이스 (postgres/ingres를 확실히 할 수 있고 많은 사람들이 확신 할 수 있음)에서 할 수 있다는 것을 알고있다. mongo 서버에서이 작업을 수행 할 수 있는지 여부는 알 수 없습니다.
이와 같은 유사하지 않은 제품을 비교하려면 두 제품의 프로그래머가 있어야합니다. 두 프로그래머는 한 제품에 대해 잘 알고 있습니다. 그들에게 과제를주십시오; 완료되면 결과를 비교하고 개선 할 수있는 또 다른 기회를 제공하십시오. –
특히 작은 데이터 세트의 경우 성능 차이가별로 없다는 것을 알게 될 것입니다. 코드의 양은 중요 할 수 있습니다. 아마도 MySQL은 더 짧아 질 것입니다. 어느 것이 더 읽기 쉬울까요? _your_ 배경에 따라 다릅니다. –