본문 바로가기

sql

hr schema 분석


아래는 sql연습할 때 보편적으로 많이들 쓰는 hr(human resources)의 erd입니다. workbench에서 Reverse Engineer로 만들었습니다. 관계 설정에 대해서 공부해보려고 분석을 해보았습니다. 





regions, countries, locations 의 관계를 먼저 분석해보았습니다. 


regions 는 각자 다른 region 들의 정보 (region_id, region_name) 을 갖습니다. 각자 대륙의 정보를 갖는다고 생각하시면 됩니다.(asia, africa, america 등등) 대륙의 정보들이 모여서 regions 테이블이 됩니다. 


countries table은 id, name, 그리고 region_id에 대한 정보도 갖습니다. 여러 나라의 정보들이 모여서 countries 테이블이 됐습니다. 한 country는 어떤 대륙인지의 정보를 갖고 있습니다. 이 정보들을 regions 에서 가져옵니다. 그리고 각각의 country들은 대륙의 정보가 다를 수 있습니다. countries 테이블이 여러개의 region 정보를 가질 수 있으므로 regions 와 countries의 관계는 1 : 多 입니다.


location(위치정보)는 country_id를 여러개 갖고 한 country 는 여러개의 region_id정보를 갖습니다. 


location 마다 country_id가 다를 수 있습니다. (1 : 多)


또 이 location은 department(부서)마다 다릅니다. 그래서 departments는 location_id값을 가져옵니다. location에 따라 회사는 1개 라고 정해져있습니다. 그래서 location과 department 테이블은 1 : 1 관계입니다.


departments 테이블은 여러 부서의 정보를 갖습니다. 각각의 부서들은 서로 다른 location_id과 manager_id를 갖을 수 있습니다.


employees테이블은 한 직원의 정보가 모여있는 테이블입니다.

한 직원은 id, first_name, last_name, email, phone_number, hire_date, job_id, salary, commission_pct, manager_id, department_id를 갖는다.

각 직원마다 department_id, job_id 의 정보를 fk로 갖습니다.  특이한 점은 자기 자신과 1 : 1 관계가 있는 것 입니다. 매니저인 사람의 아이디를 내부에서 갖기 때문에 자기 자신을 갖는다고 설정돼 있습니다.


jobs는 id, title, min_salary, max_salary 의 정보로 구성되어 있습니다. 그냥 말그대로 job(역할)의 정보들을 담은 테이블 인 것 같은데 예를 들면 개발자, 디자이너, 기획자 등등의 정보들이 담긴 테이블 입니다.


job_history 는 employee의 id를 가져와서 employee 들의 history를 저장하는 테이블 입니다. start_date와 end_date 가 있고, job_id도 가져옵니다. employee마다 입사일 퇴사일 직무 부서의 정보를 담는 테이블입니다.

-----------------------------------------------------------------------------------------------------------------------------


이렇게 말로 다 풀어보니 이해하기 더 쉬운 것 같습니다.