SQL

데이터베이스에서 다양한 유형의 관계

euicheol0910 2025. 5. 8. 10:03

데이터베이스에서 관계(Relationship)는 서로 다른 테이블 간의 연관성을 정의합니다. 관계형 데이터베이스에서는 주로 키(key)를 이용해 이러한 관계를 설정하며, 관계는 다음과 같은 주요 유형으로 분류됩니다.

 

1. 일대일 관계 (One-to-One, 1:1)

 

 

  • 한 테이블의 레코드가 다른 테이블의 정확히 하나의 레코드와만 연관됨.
  • 예: 주민등록번호와 주민 개인 정보
  • 주민 테이블의 각 주민은 하나의 주민등록정보만 가짐.
  • 구현 방식: 두 테이블 중 하나가 다른 테이블의 기본 키를 외래 키로 사용.
-- 주민 테이블
CREATE TABLE Residents (
    resident_id SERIAL PRIMARY KEY,
    name VARCHAR(100)
);

-- 주민등록 정보 테이블 (1:1 관계)
CREATE TABLE ResidentIDs (
    id SERIAL PRIMARY KEY,
    resident_id INT UNIQUE, -- UNIQUE로 1:1 보장
    ssn CHAR(13) NOT NULL,
    FOREIGN KEY (resident_id) REFERENCES Residents(resident_id)
);

 

 

 

  • ResidentIDs 테이블은 Residents 테이블과 1:1 관계.
  • 각 주민은 오직 하나의 주민등록번호를 가지며, resident_id에 UNIQUE 제약조건이 걸려 있어 1:1이 유지됩니다.

 

2. 일대다 관계 (One-to-Many, 1:N)

  • 한 테이블의 레코드는 다른 테이블의 여러 레코드와 연관될 수 있음.
  • 예: 고객과 주문한 고객은 여러 주문을 할 수 있지만, 하나의 주문은 하나의 고객에게만 속함.
  • 구현 방식: "다" 측 테이블이 "일" 측 테이블의 기본 키를 외래 키로 참조함.
-- 고객 테이블
CREATE TABLE Customers (
    customer_id SERIAL PRIMARY KEY,
    name VARCHAR(100)
);

-- 주문 테이블 (1:N 관계)
CREATE TABLE Orders (
    order_id SERIAL PRIMARY KEY,
    customer_id INT,
    order_date DATE,
    FOREIGN KEY (customer_id) REFERENCES Customers(customer_id)
);

 

 

 

  • 하나의 고객(Customers)은 여러 주문(Orders)을 할 수 있습니다.
  • 하지만 각 주문은 한 고객에게만 속함 → 1:N 관계.

 

3. 다대다 관계 (Many-to-Many, M:N)

  • 한 테이블의 여러 레코드가 다른 테이블의 여러 레코드와 연관될 수 있음.
  • 예: 학생과 과목
  • 한 학생이 여러 과목을 수강할 수 있고, 한 과목은 여러 학생이 수강 가능.
  • 구현 방식: **중간 테이블(Junction Table)**을 사용하여 두 테이블의 외래 키를 조합.
-- 학생 테이블
CREATE TABLE Students (
    student_id SERIAL PRIMARY KEY,
    name VARCHAR(100)
);

-- 과목 테이블
CREATE TABLE Subjects (
    subject_id SERIAL PRIMARY KEY,
    title VARCHAR(100)
);

-- 중간 테이블 (수강 정보) - M:N 관계
CREATE TABLE Enrollments (
    student_id INT,
    subject_id INT,
    PRIMARY KEY (student_id, subject_id),
    FOREIGN KEY (student_id) REFERENCES Students(student_id),
    FOREIGN KEY (subject_id) REFERENCES Subjects(subject_id)
);

 

 

 

  • Enrollments는 중간 테이블로 다대다(M:N) 관계를 표현.
  • 여러 학생이 여러 과목을 수강할 수 있고, 반대로도 가능.

 

4. 자가 관계 (Self-Referencing Relationship)

  • 테이블이 자기 자신과 관계를 맺는 경우.
  • 예: 사원 테이블에서 각 사원이 상사를 가질 수 있음 (상사도 같은 테이블의 사원임).
  • 구현 방식: 테이블 내의 한 필드가 같은 테이블의 기본 키를 외래 키로 참조.
-- 사원 테이블
CREATE TABLE Employees (
    employee_id SERIAL PRIMARY KEY,
    name VARCHAR(100),
    manager_id INT,
    FOREIGN KEY (manager_id) REFERENCES Employees(employee_id)
);

 

 

 

 

  • manager_id 필드가 같은 테이블의 employee_id를 참조 → 자기 자신과 관계.
  • 상사가 없는 경우(CEO 등)는 manager_id가 NULL.

 

'SQL' 카테고리의 다른 글

SQL 명령문의 실행순서  (2) 2025.05.12
RDBMS  (1) 2025.05.09
JOIN이란? 그리고 'INNER JOIN'과 'LEFT JOIN'의 차이점  (2) 2025.05.07
정규화에 대하여  (4) 2025.05.01
기본 키(primary key)와 외래 키(foreign key)  (0) 2025.05.01