[SQL] 테이블 간의 관계

김용준·2022년 10월 19일

SQL

목록 보기
3/17

테이블 간의 관계

다음과 같은 그림을 'ER(Entity-Relational) 다이어그램' 이라고 한다. 앞으로 SQL을 배우며 사용할 테이블 간의 관계를 나타낸 그림이다.
가장 위의 텍스트가 테이블 이름이고 그 아래에 있는 것들이 컬럼 이름이다. 예를 들어, REGIONS 테이블은 region_id, region_name 컬럼을 갖고 있다.

  • EMPLOYEES

    • employee_id는 사원의 고유한 번호다.

    • job_id는 JOBS테이블의 job_id를 참조한다.

    • manager_id는 EMPLOYEES 테이블의 employee_id를 참조한다.

    • department_id는 DEPARTMENTS 테이블의 department_id를 참조한다.

  • DEPARTMENTS

    • department_id는 DEPARTMENTS 테이블의 고유한 번호다.

    • manager_id는 EMPLOYEES 테이블의 employee_id를 참조한다.
      절대 EMPLOYEES 테이블의 manager_id를 참조하는 것이 아니다.

    • location_id는 LOCATIONS 테이블의 location_id를 참조한다.

  • LOCATIONS

    • location_id는 소재지의 고유한 번호다.

    • country_id는 COUNTRIES 테이블의 country_id를 참조한다.

  • COUNTRIES

    • country_id는 국가의 고유한 아이디다.

    • region_id는 REGIONS 테이블의 region_id를 참조한다.

  • REGIONS

    • region_id는 지역의 고유한 번호다.
  • JOBS

    • job_id는 직종의 고유한 아이디다.
  • JOB_HISTORY

    • employee_id와 start_date가 고유한 값이다. 각각이 고유한 값이 아니라 이 둘을 결합한 것을 고유한 값으로 본다.

    • employee_id는 EMPLOYEES 테이블의 employee_id를 참조한다.

    • job_id는 JOBS테이블의 job_id를 참조한다.

    • department_id는 DEPARTMENTS 테이블의 department_id를 참조한다.

기본키(Primary Key)와 외래키(Foreign Key)

위에서 언급한 '고유한 값'을 기본키(Primary Key)라고 한다. 즉, 행을 구분하는 유일한 값이다. 절대 중복될 수 없다.
그리고 한 테이블에 포함되어 있으면서 다른 테이블의 기본키로 지정된 키를 외래키(Foreign Key)라고 한다. 특정 테이블에서 다른 테이블을 참조할 때 외래키를 활용한다.

데이터베이스에서 참조한다는 것은 예를 들어, EMPLOYEES 테이블에서 각 직원의 부서명을 알고 싶을 때 EMPLOYEES 테이블 내에 있는 department_id를 활용해서 DEPARTMENTS 테이블의 department_name을 찾는다는 의미이다. EMPLOYEES 테이블내에는 부서명(department_name)이 없기 때문이다.

이때 department_id는 EMPLOYEES 테이블에서는 외래키이고, DEPARTMENTS 테이블에서는 기본키가 된다.

복합키(Composite Key)

복합키(Composite Key)는 여러 열을 조합하여 기본키처럼 사용하는 키를 뜻한다. 상황에 따라 하나의 기본키만으로는 행을 식별할 수 없는 경우가 있기 때문이다.

예를 들어, JOB_HISTORY 테이블이 그렇다. 이 테이블은 직원들의 직종 변경 이력을 담고 있다. 그래서 특정 직원의 직종 변경 이력이 여러 번이라면 테이블 내에 employee_id가 중복될 수 있고, 직종 변경 날짜가 같은 직원이 있다면 start_date가 중복될 수 있다.

따라서 employee_id와 start_date를 조합한 형태를 기본키로 사용한다. 이를 복합키라고 한다.

1:N 관계

그림에서 빨간색 동그라미 부분이 1:N 관계 즉, 일대다 관계이다. 일대다 관계의 의미는 한 테이블의 레코드가 다른 테이블의 레코드를 여러 개 가질 수 있다는 것이다.

예를 들어, COUNTRIES 테이블의 region_id는 REGIONS 테이블의 region_id를 참조한다. 그리고 REGIONS 테이블의 region_id는 COUNTRIES 테이블에서 여러 개의 region_id를 가질 수 있다.

그림에서 볼 수 있듯이, REGIONS 테이블에서 region_id는 중복되지 않고 반드시 한 개씩 존재하지만, COUNTRIES 테이블에서 region_id는 여러 개 존재한다.

profile
차선이 모여 최선이 된다.

0개의 댓글