2010-04-25 4 views
1

직원 교대 데이터베이스를 만들어야합니다. 그래서 지금까지 3 테이블, 직원, employee_shift 및 교대직원을위한 SQL 시간표

인스턴트 메신저 내 말은, 한 달이 30 일이 28 일 가지고 있기 때문에 내 말은, 월말에 직원이 얼마나 많은 근무 교대를 계산 가정 Logged 31 일.

이것은 내가 31 가지 다른 변형을 만드는 교대 테이블을 만들 필요가 있다는 것을 의미합니까? 한 달에 매일 하나씩? 어떤 직원이 가장 많이 근무했는지 계산하려면?

내 비즈니스 관계에 직원이 하루에 1 ~ 2 교대 근무를하고 있으므로 60 개의 서로 다른 행을 사용해야합니까? 내가 맞다거나 쉽게 해결할 수있는 방법이있다.

답변

0

이 같은 세 개의 테이블 사용한다 : 변화 할 시간을 이동 가능성이있는 경우

Employee - EmployeeId, EmployeeName etc. 
ShiftRecords - ShiftRecordId, EmployeeId, InTime, OutTime 
Shift - ShiftId, ShiftStartTime, ShiftEndTime 

을, 당신은 시프트 테이블이 isActive 컬럼과 함께 변화의 시작 날짜와 종료 날짜를 포함 할 수 있습니다.

+0

특정 월에 가장 높은 근무 시간을 가진 EMP를 보여주기 위해 select 문을 생성 할 수 있습니까? –

0

나는 Employee, Shifts 및 Employee_InOut이라는 3 개의 테이블을 고수 할 것이다. 마지막 표에는 날짜, 시간 및 시간대에 대한 열이 있습니다. 근무 시간과 근무 시간이 직원의 근무 교대를 파악하는 열쇠가됩니다. 그래서 저는 한 달 동안 직원의 교대 세부 사항과 함께 근무 교대의 수를 계산할 수 있습니다. 그것은 간단합니다.

+0

아니요. 당신은 설계에 도움을 받아야합니다. 왜냐하면 60 필드 테이블을 사용해 본다면 기본적으로 SQL 데이터베이스를 설계하려고하는 맹인이기 때문입니다. 회사 직원에게 도움을 요청하십시오. SQL 기초를 아는 사람. 그때 배웁니다;) – TomTom

+0

RDBMS 및 정규화의 기본으로 돌아가십시오. 이렇게 많은 필드를 넣으면 융통성이 제한되고 복잡하게 늘어납니다. – Kangkan

0
  1. 데이터를 타임 스탬프 열에 삽입 할 수 없습니다. 대신 시간을 사용하십시오.
  2. Emp_Id 및 Shift_Id를 기본 키로 사용할 수 없기 때문에 기본 키로 사용할 수 없습니다. 기본 키가 실제로 필요한 경우 다른 열을 Shift_Record_Id라고 추가하십시오.

스크립트 작성과 관련하여 간단해야합니다. 로직을 찾아서 select 구문과 사용할 수있는 키워드에 대해 읽는 것만으로 충분합니다.