Mysql에서 제공되는 직원(Employees) 데이터 베이스는
다음 그림과 같이 6개의 테이블로 구성되어 있다.
원본 주소: https://dev.mysql.com/doc/employee/en/sakila-structure.html
직원(employees), 부서(departments), 급여(salaries)의 기본 테이블이 있고
직원이 속한 부서를 나타내는 dept_emp, 해당부서의 부서장을 저장하는 dept_manager 있다.
마지막으로 직원의 업무(titles)를 저장하는 테이블이 있다.
직원(employees)
설명 | 필드명 | 자료형 | 크기 | 기타 |
직원번호 | emp_no | INT | 기본키 | |
생년월일 | birth_date | DATE | ||
이름 | first_name | VARCHAR | 14 | |
성 | last_name | VARCHAR | 16 | |
성별 | gender | EUM | ||
입사일자 | hire_date | DATE |
급여(salaries)
설명 | 필드명 | 자료형 | 크기 | 기타 |
직원번호 | emp_no | INT | 외래키 | |
급여 | salary | INT | ||
지급시작일 | from_date | DATE | 보조키 | |
지급종료일 | to_date | DATE |
부서(departments)
설명 | 필드명 | 자료형 | 크기 | 기타 |
부서번호 | dept_no | CHAR | 4 | 기본키 |
부서명 | dept_name | VARCHAR | 40 |
소속부서(dept_emp)
설명 | 필드명 | 자료형 | 크기 | 기타 |
직원번호 | emp_no | INT | 외래키 | |
부서번호 | dept_no | CHAR | 4 | 외래키 |
근무시작일 | from_date | DATE | ||
근무종료일 | to_date | DATE |
부서장(dept_manager)
설명 | 필드명 | 자료형 | 크기 | 기타 |
직원번호 | emp_no | INT | 외래키 | |
부서번호 | dept_no | CHAR | 4 | 외래키 |
부서장시작일 | from_date | DATE | ||
부서장종료일 | to_date | DATE |
직원의 업무(titles)
설명 | 필드명 | 자료형 | 크기 | 기타 |
직원번호 | emp_no | INT | 외래키 | |
업무명 | title | VARCHAR | 50 | 보조키 |
업무시작일 | from_date | DATE | 보조키 | |
업무종료일 | to_date | DATE |
직원이 속한 부서를 나타내는 소속부서(dept_emp) 테이블은
직원(employees) 테이블의 직원번호(emp_no)와 부서(departments) 테이블의 부서번호(dept_no)를 기본키(Primary key)로 가지는데
이것을 외래키(Foreign Key)라고 한다.
부서의 부서장을 저장하는 부서장(dept_manager) 테이블도 동일한 방식으로 생성되었다.
급여(salaries) 테이블은 직원번호(emp_no)가 외래키로 지정되었는데
직원번호만 외래키로 할 경우 데이터 중복이 발생한다.
한 직원이 1년 동안 2,000원을 받는 다고 할 때 퇴사할 때까지 2,000원 받는 것이 아니고
3,000, 4,000 등으로 변하기 때문이다.
따라서 한 개인의 급여(연봉)는 중복 될 수 있고 중복을 피하기 위해서는 보완적인 키가 필요하다.
급여 테이블에서는 지급시작일(from_date)이 보조키로 지정되어 있다.
직원의 업무(titles)도 시간의 흐름에 따라 바뀌기 때문에 이와 유사한 구조로 되어 있는데
업무명(title)이 키로 지정되어 3개의 복합키(Composite Key)로 지정되었다.
'Database > SQL 연습' 카테고리의 다른 글
1. 설치 (2) | 2016.04.02 |
---|---|
실습 1 (2) | 2016.04.02 |
실습 2 - GROUP (2) | 2016.04.02 |
실습 3 - Join (0) | 2016.04.02 |
실습 4 - SubQuery (0) | 2016.04.02 |