일대일, 일대다, 다대다 관계 모델링

관계형 데이터베이스에서는 여러 테이블 간의 연관 관계를 표현하기 위해 다양한 관계 모델을 사용합니다. 이 중에서 가장 일반적으로 사용되는 모델은 일대일, 일대다, 다대다 관계 모델입니다. 이번 글에서는 각각의 관계 모델링에 대해 자세히 살펴보겠습니다.

일대일 (One-to-One) 관계

일대일 관계는 두 테이블 간에 하나의 레코드가 다른 테이블의 레코드와 연관되는 관계를 말합니다. 일반적으로 양 끝의 테이블 간에 고유 키(unique key)가 필요하며, 한 테이블의 행은 다른 테이블의 행과 정확히 한 번만 연결됩니다.

예를 들어, 학생과 주소 테이블이 있다고 가정해봅시다. 각 학생은 한 개의 주소만 가지며, 각 주소는 하나의 학생에게만 속합니다. 이러한 경우, 학생 테이블과 주소 테이블 간에 일대일 관계를 설정할 수 있습니다.

CREATE TABLE students (
    student_id INT PRIMARY KEY,
    name VARCHAR(50),
    ...
);

CREATE TABLE addresses (
    address_id INT PRIMARY KEY,
    street VARCHAR(50),
    city VARCHAR(50),
    student_id INT UNIQUE,
    FOREIGN KEY (student_id) REFERENCES students(student_id)
);

일대다 (One-to-Many) 관계

일대다 관계는 한 테이블의 레코드가 다른 테이블의 여러 레코드와 연관되는 관계를 말합니다. 일반적으로 부모 테이블과 자식 테이블로 구성되며, 부모 테이블의 고유 키가 자식 테이블의 외래 키(foreign key)로 사용됩니다.

예를 들어, 회사와 직원 테이블이 있다고 가정해봅시다. 한 회사는 여러 명의 직원을 가질 수 있지만, 각 직원은 하나의 회사에 속해야 합니다. 이 경우, 회사 테이블과 직원 테이블 간에 일대다 관계를 설정할 수 있습니다.

CREATE TABLE companies (
    company_id INT PRIMARY KEY,
    name VARCHAR(50),
    ...
);

CREATE TABLE employees (
    employee_id INT PRIMARY KEY,
    name VARCHAR(50),
    company_id INT,
    FOREIGN KEY (company_id) REFERENCES companies(company_id)
);

다대다 (Many-to-Many) 관계

다대다 관계는 두 테이블 간에 복잡한 연결을 나타내는 관계를 말합니다. 한 테이블의 레코드가 다른 테이블의 여러 레코드와 연관되며, 그 반대도 마찬가지입니다. 이러한 관계는 중간 테이블을 통해 표현됩니다.

예를 들어, 학생과 과목 테이블이 있다고 가정해봅시다. 한 명의 학생은 여러 과목을 수강할 수 있으며, 한 과목은 여러 학생에게 수강될 수 있습니다. 이 경우, 학생과 과목 사이에 다대다 관계가 존재하며, 중간 테이블을 이용하여 관계를 설정할 수 있습니다.

CREATE TABLE students (
    student_id INT PRIMARY KEY,
    name VARCHAR(50),
    ...
);

CREATE TABLE subjects (
    subject_id INT PRIMARY KEY,
    name VARCHAR(50),
    ...
);

CREATE TABLE enrollments (
    enrollment_id INT PRIMARY KEY,
    student_id INT,
    subject_id INT,
    FOREIGN KEY (student_id) REFERENCES students(student_id),
    FOREIGN KEY (subject_id) REFERENCES subjects(subject_id)
);

위와 같은 방식으로 다대다 관계를 표현할 수 있습니다.

정리

관계형 데이터베이스에서 일대일, 일대다, 다대다 관계 모델링을 사용하여 테이블 간 관계를 표현할 수 있습니다. 이를 효율적으로 설계하고 사용하면 데이터베이스의 성능과 유지보수 용이성을 향상시킬 수 있습니다.

#관계모델링 #데이터베이스