Post

5.2 Create Table

테이블 생성 구문

CREATE TABLE은 테이블을 생성하기 위한 DDL구문이다. 테이블 생성 구문은 다음과 같이 사용할 수 있다:

1
2
3
4
5
6
7
CREATE TABLE tb_name (
    col_name_1 TYPE column_constraint_1,
    col_name_2 TYPE column_constraint_2,
    ...
    CONSTAINT table_constraint_1,
    CONSTAINT table_constraint_2,
    ...);

여기서 필수로 정의해야하는 정보는 테이블명, 컬럼명, TYPE으로, Column Constraint와 Table Constraint는 필요하다면 추가로 정의하면 된다.

Employee 테이블 생성

Table 0: Employee Table

employee_idnamecreated_atemail
1김철수2023-01-01 00:00:00ironsoo@naver.com
2이영희2023-01-02 15:20:00202@gmail.com
3홍길동2023-01-03 09:55:00hkd@gmail.com

한번 CREATE TABLE구문을 이용하여 위에 보이는 Employee 테이블을 생성해 보자. Employee 테이블을 보면 다음과 같은 컬럼으로 구성을 가지고있다.

  • employee_id: 식별값 (PRIMARY KEY). 순차적으로 증가 (SERIAL).
  • created_at: 등록일시 (TIMESTAMP).
  • name: 직원의 이름 (VARCHAR).
  • email: 직원의 이메일 (VARCHAR). 유니크한 값 (UNIQUE).

모든 컬럼이 NULL을 허용하지 않는다할때 employee 테이블을 생성하는 쿼리문은 다음과 같다:

1
2
3
4
5
CREATE TABLE employee (
    employee_id SERIAL PRIMARY KEY,
    created_at TIMESTAMP NOT NULL,
    name VARCHAR NOT NULL,
    email VARCHAR UNIQUE NOT NULL);

그리고 PK는 Table Constraint를 통해서도 지정할수 있다:

1
2
3
4
5
6
CREATE TABLE employee (
    employee_id SERIAL,
    created_at TIMESTAMP NOT NULL,
    name VARCHAR NOT NULL,
    email VARCHAR UNIQUE NOT NULL,
    CONSTRAINT employee_pkey PRIMARY KEY (employee_id));

Job 테이블 생성

Table 1: Job Table

job_idnamecreated_at
1개발자2023-01-01 00:00:00
2기획자2023-01-02 00:-0:00

직원을 의미하는 Employee 테이블을 생성했으니, 직책을 의미하는 Job 테이블을 생성해보자. Job 테이블의 컬럼 구성은 다음과 같다.

  • job_id: 식별값 (PRIMARY KEY), 순차적으로 증가 (SERIAL).
  • created_at: 등록일시 (TIMESTAMP).
  • name: 직책의 이름 (VARCHAR).

Job 테이블 또한 모든 컬럼이 NULL을 허용하지 않는다할 때 Job 테이블을 생성하는 쿼리문은 다음과 같다:

1
2
3
4
CREATE TABLE job (
    job_id SERIAL PRIMARY KEY,
    created_at TIMESTAMP NOT NULL,
    name VARCHAR NOT NULL);

Employee 테이블과 Job 테이블의 연결

일반 적인 회사라면 직원에게는 직책이 부여된다. 직원에게 직책을 부여하기 위해선, Employee 테이블과 Job 테이블 사이의 연결관계를 만들어야한다.

연결관계를 만들기위해 Employee 테이블에 job.job_id 를 가리키는 FK를 추가할수도 있지만, 이번 포스트에서는 두 테이블 사이를 연결하는 EmployeeJob 테이블을 만들것이다.

Table 2: EmployeeJob Table

employee_idjob_idhired_at
   
  • employee_id: 직원의 식별값 (FOREIGN KEY). employee.employee_id 를 가리킴 (REFERENCES …).
  • job_id: 직책의 식별값 (FOREIGN KEY). job.job_id 를 가리킴 (REFERENCES …).
  • hired_at: 직책을 지정한 일시 (TIMESTAMP).

EmployeeJob 테이블의 PK는 employee_id와 job_id의 조합으로 지정한다 할때, EmployeeJob 테이블의 생성 쿼리문은 다음과 같다:

1
2
3
4
5
6
7
CREATE TABLE job_employee (
    job_id INTEGER NOT NULL,
    employee_id INTEGER NOT NULL,
    hired_at TIMESTAMP NOT NULL,
    CONSTRAINT job_employee_pkey PRIMARY KEY (job_id, employee_id),
    CONSTRAINT job_employee_job_fkey FOREIGN KEY (job_id) REFERENCES job(job_id),
    CONSTRAINT job_employee_employee_fkey FOREIGN KEY (employee_id) REFERENCES employee(employee_id));  

이렇게 EmployeeJob 테이블을 생성함으로써 Job과 Employee의 연결관계를 저장하고, JOIN을 이용하여 조회할 수있다.

This post is licensed under CC BY 4.0 by the author.