SQL/데이터베이스 기초

데이터 모델링 & ER다이어그램

temporubato108 2024. 10. 13. 15:21

데이터 모델링과 ER 다이어그램

데이터 모델링과 ER 다이어그램은 데이터베이스 설계에서 빠질 수 없는 중요한 과정입니다. 데이터를 효과적으로 관리하기 위해 데이터를 구조화하고, 개체 간의 관계를 시각적으로 표현하는 것이 핵심입니다. 이번 글에서는 데이터 모델링의 단계와 ER 다이어그램에 대해 설명하고, 실제로 이를 어떻게 활용할 수 있는지 예시를 통해 알아보겠습니다.

 


 

데이터 모델링

데이터 모델링은 현실 세계의 데이터를 데이터베이스에 저장하기 위해 체계적으로 구조화하는 과정입니다. 데이터 모델링은 데이터베이스 시스템의 성능과 유지 관리에 중요한 역할을 하며, 데이터의 일관성을 보장하기 위한 중요한 단계입니다.

데이터 모델링의 세 단계

  1. 개념적 모델링: 이 단계에서는 데이터베이스에 저장할 주요 개체와 관계를 추상화하여 정의합니다. 주로 현실 세계의 객체들을 데이터베이스에서 어떻게 나타낼지 고민하는 단계입니다. 예를 들어, 고객, 제품, 주문 같은 개체를 식별하고, 이들 간의 관계를 설정합니다.
  2. 논리적 모델링: 개념적 모델링에서 정의한 개체와 관계를 구체적으로 표현하는 단계입니다. 각 개체에 대한 속성, 기본키, 외래키 등을 정의하며, 데이터의 구조를 보다 세밀하게 설계합니다. 이 단계에서는 실제로 데이터가 어떻게 구성될지에 대한 명확한 청사진을 제공합니다.
  3. 물리적 모델링: 논리적 모델링을 기반으로 데이터베이스에서 실제로 사용할 테이블, 컬럼, 인덱스 등을 정의하는 단계입니다. 이 단계에서는 데이터 저장소의 물리적 특성을 고려하여 성능 최적화를 위한 설계를 합니다.

 


 

관계

이미지에서 표현된 데이터 모델링의 관계(Relationship)는 ER 다이어그램에서 매우 중요한 요소입니다. 개체 간의 관계를 시각적으로 표현하여 데이터베이스의 구조와 데이터 간의 상호작용을 명확하게 파악할 수 있게 해줍니다.

 

crow's foot 표기법으로 나타낸 관계

 

- 1:1 관계

1:1 관계는 두 개체 간의 관계에서, 한 개체 A가 오직 하나의 개체 B와만 연결되는 관계를 의미합니다. 예를 들어, 각 사람은 하나의 주민등록번호를 가지고 있으며, 하나의 주민등록번호는 한 사람과만 연결될 수 있습니다.

 

테이블 PersonID_Card가 있을 때, 각각의 사람이 고유한 ID 카드를 가지는 경우를 1:1 관계로 나타낼 수 있습니다.

CREATE TABLE Person (
    person_id INT PRIMARY KEY,
    name VARCHAR(100)
);

CREATE TABLE ID_Card (
    id_card_id INT PRIMARY KEY,
    person_id INT,
    FOREIGN KEY (person_id) REFERENCES Person(person_id)
);

 

 

- 1:N 관계 (또는 N:1)

1:N 관계는 한 개체 A가 여러 개체 B와 연결될 수 있는 관계입니다. 예를 들어, 한 명의 고객이 여러 개의 주문을 할 수 있는 상황을 생각할 수 있습니다. 이때 고객은 하나의 개체지만 여러 개의 주문과 연결될 수 있습니다.

 

Customer 테이블과 Order 테이블이 있을 때, 하나의 고객이 여러 개의 주문을 할 수 있는 관계를 나타냅니다.

CREATE TABLE Customer (
    customer_id INT PRIMARY KEY,
    name VARCHAR(100)
);

CREATE TABLE Orders (
    order_id INT PRIMARY KEY,
    customer_id INT,
    FOREIGN KEY (customer_id) REFERENCES Customer(customer_id)
);

 

 

- N:N 관계

N:N 관계는 여러 개체 A가 여러 개체 B와 연결될 수 있는 관계입니다. 예를 들어, 한 학생이 여러 과목을 수강할 수 있고, 각 과목은 여러 학생에 의해 수강될 수 있는 상황이 있습니다. 이 경우, 학생과 과목 간의 관계는 N:N 관계로 나타낼 수 있습니다.

 

Student 테이블과 Course 테이블 사이에서 학생과 수업 간의 N:N 관계를 나타내기 위해, 이를 표현할 연결 테이블이 필요합니다.

CREATE TABLE Student (
    student_id INT PRIMARY KEY,
    name VARCHAR(100)
);

CREATE TABLE Course (
    course_id INT PRIMARY KEY,
    course_name VARCHAR(100)
);

CREATE TABLE Enrollment (
    student_id INT,
    course_id INT,
    PRIMARY KEY (student_id, course_id),
    FOREIGN KEY (student_id) REFERENCES Student(student_id),
    FOREIGN KEY (course_id) REFERENCES Course(course_id)
);

 

각 관계의 용도

 

1:1 관계는 주로 논리적으로 구분된 데이터의 집합을 연결할 때 사용되며, 1:N 관계는 실생활에서 자주 등장하는, 개체가 다수와 연결될 수 있는 구조에서 사용됩니다. N:N 관계는 복잡한 다대다 연결을 관리할 때 주로 사용되며, 이 경우에는 중간에 연결 테이블을 두어 각 개체 간의 관계를 효과적으로 관리합니다.

 


 

ERD (Entity-Relationship Diagram)

 

ER 다이어그램은 데이터베이스의 개체와 관계를 시각적으로 표현한 도구로, 데이터베이스 설계 과정에서 가장 널리 사용됩니다. ER 다이어그램을 통해 데이터를 어떻게 구조화하고 저장할지 명확하게 파악할 수 있습니다.

ERD의 주요 구성 요소

  1. 개체(Entity): 저장할 데이터를 나타내는 객체로, 주로 사각형으로 표시됩니다. 예를 들어, '고객', '제품', '주문' 등이 개체로 표현됩니다.
  2. 속성(Attribute): 각 개체가 가지는 속성을 나타내며, 타원형으로 표시됩니다. 예를 들어, '고객' 개체에는 '이름', '주소', '전화번호' 등의 속성이 포함될 수 있습니다.
  3. 관계(Relationship): 두 개체 간의 상호작용이나 연결을 나타내며, 다이아몬드 모양으로 표현됩니다. 예를 들어, '고객'과 '주문' 간의 관계는 '고객이 주문을 한다'로 표현될 수 있습니다.

ERD 작성 과정

  1. 개체 식별: 데이터베이스에서 관리할 주요 개체들을 식별합니다.
  2. 속성 정의: 각 개체가 가지는 속성들을 설정합니다. 예를 들어, '고객' 개체에는 이름, 이메일, 전화번호 등의 속성이 있을 수 있습니다.
  3. 관계 설정: 개체들 간의 관계를 정의하고, 그 관계가 어떻게 연결되는지 설정합니다. 예를 들어, 고객과 주문 간의 관계를 설정합니다.

ERD의 표기법

  • Chen 표기법: 개체는 사각형, 관계는 다이아몬드, 속성은 타원으로 표현됩니다.

 

 

  • Crow's Foot 표기법: 관계의 다중성을 더 명확하게 표현하기 위해 까마귀 발 모양의 기호를 사용합니다.

 


 

예시: 공유 킥보드 서비스의 데이터 모델링

개념적 설계

  • 개체: 고객, 킥보드, 대여
  • 속성: 고객은 이름, ID, 전화번호를, 킥보드는 브랜드, ID, 기본 요금을, 대여는 대여 시간과 장소를 속성으로 가집니다.
  • 관계: 고객은 킥보드를 대여할 수 있고, 대여는 고객과 킥보드 간의 관계를 나타냅니다.

논리적 설계

  • 기본키: 각 개체에 고유한 식별자를 설정합니다. 예를 들어, 고객의 customer_id와 킥보드의 scooter_id를 설정합니다.
  • 외래키: 대여 테이블에서 customer_idscooter_id는 각각 고객과 킥보드를 참조하는 외래키로 설정됩니다.

물리적 설계 예시

CREATE TABLE customers (
    customer_id INT PRIMARY KEY,
    name VARCHAR(100),
    phone VARCHAR(15)
);

CREATE TABLE scooters (
    scooter_id INT PRIMARY KEY,
    brand VARCHAR(50),
    base_fee DECIMAL(10, 2)
);

CREATE TABLE rentals (
    rental_id INT PRIMARY KEY,
    customer_id INT,
    scooter_id INT,
    rental_time TIMESTAMP,
    rental_location VARCHAR(100),
    FOREIGN KEY (customer_id) REFERENCES customers(customer_id),
    FOREIGN KEY (scooter_id) REFERENCES scooters(scooter_id)
);

'SQL > 데이터베이스 기초' 카테고리의 다른 글

제약 조건과 키(Constraints & Keys)  (1) 2024.10.13
데이터베이스 개요  (1) 2024.10.12