2016-08-10 2 views
0

직원 출석 시스템을위한 데이터베이스를 설계하고 구현해야합니다. db는 비 관계형 일 필요는 없으며, 요구 사항에 가장 잘 어울릴 수 있습니다. 요구 사항은 간단하며 직원 정보를 시계와 함께 저장해야합니다. 다음과 같이출석 시스템 MongoDB 디자인

데이터 요구 사항은 다음과 같습니다 직원의

  1. 번호가 큰되지 않습니다 (20 ~ 50).
  2. 특정 일 또는 일정 기간 (예 : 한 달) 동안 모든 직원의 모든 출석 시간을 검색 할 수있는 기능.
  3. 특정 직원의 출석 시간을 추가/수정/제거 할 수 있습니다.
  4. 각 직원에 대해 계산 된 지연 출석을 검색 할 수있는 기능. 직원은 출석 시간 및 직원 정보와 관련된 일부 비즈니스 규칙에 따라 늦은 것으로 간주됩니다.

- MongoDB를 사용하면 관계형 SQL (mySQL과 같은)을 사용하는 것이 더 나은가요?

- DB 구현, 데이터 액세스 및 응용 프로그램 개발을 가장 단순하게 만드는 DB의 제안 된 상위 수준 디자인은 무엇입니까?

+0

이와 같은 유사하지 않은 제품을 비교하려면 두 제품의 프로그래머가 있어야합니다. 두 프로그래머는 한 제품에 대해 잘 알고 있습니다. 그들에게 과제를주십시오; 완료되면 결과를 비교하고 개선 할 수있는 또 다른 기회를 제공하십시오. –

+0

특히 작은 데이터 세트의 경우 성능 차이가별로 없다는 것을 알게 될 것입니다. 코드의 양은 중요 할 수 있습니다. 아마도 MySQL은 더 짧아 질 것입니다. 어느 것이 더 읽기 쉬울까요? _your_ 배경에 따라 다릅니다. –

답변

1

이 설계는 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 서버에서이 작업을 수행 할 수 있는지 여부는 알 수 없습니다.

+0

그렇다면 동일한 RDBMS입니다. MongoDB는 나에게 새로운 것이지만, RDBMS를 통해 달성 할 수 있다고 확신합니다. 특히 "출석"에는 많은 "속성"이 없습니다. 몽고와 함께 갈만한 이점이 있습니까? – Jeb50

+0

MongoDB 또는 RDBMS로 많은 문제를 해결할 수 있습니다.이 예제에서 어느 옵션이든 작동한다고 생각합니다. 그래서 가장 안락한 것이 최고의 선택 일 수 있습니다.이 시스템이 매우 커지거나 여러 사이트에 퍼질 필요가 있다면 MongoDB가 더 적합 할 수 있다고 생각하지만 RDBMS로는 불가능하지 않습니다. 약간의 비교를 위해서 (비록 약간의 마케팅 임에도 불구하고) Mongo의이 비교 기사 (https://www.mongodb.com/compare/mongodb-mysql)를 확인하십시오. – Azwok

1

당신은 직원과 출석자를위한 2 개의 컬렉션을 가질 수 있습니다.

직원 컬렉션 직원에 관련된 속성을 가질 수있다

  • 이 _id : OBJECT_ID는
  • 이름 : 문자열
  • 이메일 : 문자열
  • ... 다른 직원이 속성

및 출석 컬렉션은 출석과 관련된 속성을 가질 수 있습니다.

  • _id : ....
  • 날짜
  • 다른 출석 매개 변수 : 날짜
  • Out_time을 : 날짜 (당신은 문자열이나
  • In_time을 하루가 고유하게 다른 형식으로 날짜를 저장할 수 있습니다
  • employee_id입니다 :. (직원에 대한 _id)

HTH

+0

이 솔루션은 관계형 데이터베이스 디자인의 사고 방식을 따르고 있으며, 디자인이 필요한 쿼리의 단순함을 실제로 돕지는 않는다고 생각합니다. –