2008-09-30 3 views
0

(1) employee_type, (2) employee 및 (3) employee_action 테이블이 포함 된 응용 프로그램을 작성하고 있습니다.직원이 출퇴근 할 때 직원 작업 내역을 저장하는 SQL 스키마

Employee_action은 직원에게 외래 키이며 예상했던대로 발생한 일과 날짜에 대한 설명이 들어 있습니다.

그러나 직원은 시간이 지남에 따라 유형을 변경할 수 있습니다 (승격, 강등, 재배치 등). 필자의 스키마가 이와 같이 간단하다면 10 년 전에 John에게 그가 피자를 배달하지 않을 때 CEO가되었다는 역사적인 보고서를 만들 수 있습니다.

직원들이 행동을 수행 할 당시 특정 시점에 특성을 지녔다는 사실을 현재 시점에서 반드시 확인해야하는 가장 좋은 방법은 무엇입니까?

나는 여기에서 나의 문제를 간단히 말하고있다. 나는 3보다 많은 테이블을 보유하고 있으며, 직원 위치가 내가 걱정하는 유일한 특성이 아닙니다. 모든 것을 비정규 화하고 모든 가능한 직원 필드가있는 기록 테이블을 만드는 것은 제가 선택할 수있는 옵션이 아닙니다.

감사합니다.

답변

0

그리고 당신의 질문에 대답하기 위해, 나는 당신의 유일한 옵션이라고 생각한다. (만약 당신이 스키마를 재 설계 할 수 없다면) 특정 조건이 참인 시간대를 저장하는 테이블을 추가하는 것입니다. 예를 들어 고용인이있는 테이블 employ_history, 위치 ('CEO', '배달 소년'또는 ID가 정규화 된 경우 해당 위치의 ID 표)와 종업원이 그 직위를 가졌음을 나타내는 시작 및 종료를위한 필드가 있습니다. 그렇게하면 고용인이 현재 가지고있는 직위를 얻기 위해 고용 _ 역사표에 가입 할 수 있습니다. 물론, 기하 급수적으로 늘어나는 PITA가 될 위치보다 더 많은 '속성'을 저장해야하는 경우. 더 많은 토론을 위해 위의 책을 읽어라 :)

+0

나는 이런 걸 생각했다. 나는 그것이 끔찍한 생각인지 아닌지 몰랐다. 그래서 나는 그것이 당신의 의견을 가지고있어서 기쁘다. 감사! – user23696

+0

이것은 데이터웨어 하우징 사용자가 사용하는 "천천히 변화하는 차원"접근 방식입니다. 그것은 위대한 작품. –

0

employee_type과 직원을 연결하는 전환 (다 대다) 테이블을 도입 한 다음 직원 작업을이 전환 테이블에 연결하는 것이 고려 되었습니까? 전환 표에는 시간 기록을위한 추가 열이있을 수 있습니다. 이렇게하면 시간순으로 사물을 추적 할 수 있습니다.

+0

이것은 Roel이 아래에 게시 한 것과 유사하며 나는 제안을 취하고있다. 고맙습니다! – user23696

1

SQL의 시간 데이터 표현은 까다 롭습니다. 이 주제에 관한 아주 좋은 책이 있으며, 저자의 온라인 012OOKPROBLOCK : http://www.cs.arizona.edu/people/rts/tdbbook.pdf에서도 무료로 이용할 수 있습니다.

아마존 페이지는 http://www.amazon.com/Developing-Time-Oriented-Database-Applications-Management/dp/1558604367에 있지만 절판됩니다.

SQL에서 시간이 지남에 따라 모델링 변경 사항을 심각하게 생각한다면이 책은 반드시 읽어야합니다. 나는 그것에서 많은 것을 배웠고 나는 단지 그것을 읽었을 뿐인데, 아마 25 %를 이해할 것이다. :)

+0

고맙습니다! 확실히 그것을 확인합니다. – user23696

관련 문제