본문 바로가기

[서버/공부] 데이터베이스 설계 및 정규화 이론

@hyeon.s2024. 11. 5. 14:06

외래 키란(Foreign Key = FK)

  • 다른 테이블의 기본 키(PK) 를 참조하는 키이다.
  • 특징*
  • 테이블 간의 연관 관계를 표현하는데 사용된다.
  • 참조 무결성을 유지해야 한다.
    • *참조 무결성 : 외래 키가 참조하는 기본 키가 반드시 존재해야 한다는 제약 조건
    • CASCADE, SET NULL, RESTRICT, NO ACTION 등의 방식으로 부모데이터 삭제시 자식 데이터 동작 방식을 제어할 수 있다.
  • 한 테이블 내에 여러개의 외래키를 가질 수 있다.

기본 키란 (Primary Key = PK)

  • 테이블에서 각 행을 유일하게 식별할 수 있는 컬럼 또는 컬럼의 조합이다.

  • 특징*

  • 각 행을 고유하게 구분하는 값으로 중복될 수 없고, NULL일 수 없다.

  • 한 테이블에는 하나의 기본키만 존재해야 한다.

  • 두 개 이상의 컬럼을 조합해서 복합키를 만들 수도 있다.

    • *복합키 : 두 개 이상의 컬럼을 조합하여 기본키로 설정

ER 다이어그램이란 (ERD)

  • 데이터베이스의 구조를 시각적으로 표현하는 다이어그램을 의미한다.
  • 테이블(엔터티) 간의 관계를 쉽게 이해하고 설계할 수 있도록 도와주는 그림이다.

ERD 구성요소

ERD는 3가지 주요 오소로 구성된다.

1. 엔터티 (Entity)

  • 데이터베이스에서 저장할 대상을 의미한다.
  • 테이블과 같은 개념으로 ERD에서 사각형으로 표현된다.
  • 예시 ) 학생, 강의, 교수

2. 속성 (Attribute)

  • 엔터티가 가지는 정보 (Column, field)를 의미한다.
  • 타원형으로 표현된다.
  • 속성 중에서 고유한 값을 가지는 속성을 기본키 (PK)라고 한다.
  • 예시 ) 학생 (Entity) → Attribute : 학번(PK), 이름, 전공 … etc

3. 관계 (Relation)

  • 엔터티와 엔터티 사이의 연결을 의미한다.
  • 엔터티 간 사이는 외래키(FK) 를 통해 연결된다.
  • 마름모로 표현된다.

복합키란 (Combination Key)

  • 두 개 이상의 컬럼을 조합하여 기본 키 (PK)로 사용하는 것을 말한다.
  • 하나의 컬럼만으로 유일성을 보장할 수 없을 때, 여러 개의 컬럼을 합쳐서 기본키로 설정한다.

복합키 예시

  • 강의 수강 테이블이 있다고 가정해보자. 속성은 student_id, course_id를 포함한다.
  • 이 때 각 학생은 여러개의 강의를 들을 수 있고, 하나의 강의에는 여러명의 학생이 들을 수 있다.
student_id (PK) course_id (PK) grade
1001 C101 A
1001 C102 B+
1002 C101 A-
- 따라서 student_id, course_id 두개를 함께 기본키(PK)로 지정해서 각 행을 고유하게 식별 가능하도록 한다.

연관관계란

  • 테이블 간의 관계를 의미하는 말로, 하나의 테이블이 다른 테이블과 어떻게 연결되는지 나타내는 개념이다.

연간관계 종류

1. 1:1 관계 (One-to-One)

  • 하나의 엔터티가 다른 엔터티로 1:1 연결된다.
  • 예시 ) 사용자(User) - 여권(Passport)
    • 한 명의 사용자는 하나의 여권만 가질 수 있다.
    • 한 개의 여권은 한 명의 사용자만 갖는다.

2. 1:N 관계 (One-to-Many)

  • 하나의 엔터티가 다른 엔터티와 1:N 관계
  • 예시 ) 교수(Professor) - 강의(Course)
    • 한 명의 교수는 여러 개의 강의를 담당할 수 있다.
    • 하지만 하나의 강의는 한 명의 교수만 담당한다.

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

  • 두 엔터티가 서로 N:M을 가질 때를 의미한다.
  • 예시 ) 학생 (Student) - 강의 (Course)
    • 한 명의 학생이 여러 개의 강의를 들을 수 있다.
    • 하나의 강의는 여러 명의 학생이 수강할 수 있다.

정규화란

  • 데이터베이스 설계에서 중복을 최소화하고, 데이터의 일관성을 유지하기 위해 데이터를 구조화하는 과정이다.

정규화 목적

  • 데이터 중복을 최소화하여 저장 공간을 효율적으로 사용한다.
  • 데이터 삽입, 수정, 삭제 시 이상을 방지한다.
  • 데이터의 무결성을 유지한다.

정규화 단계

1NF(제 1정규화)

  • 테이블의 모든 속성 값은 하나의 값만 가져야 한다.
  • 반복되는 그룹을 제거해야 한다.
  • 예시 ) 전화번호가 여러 개일 경우, 개별적인 행으로 분리

2NF(제 2정규화)

  • 1NF를 만족하면서, 기본 키의 일부가 아닌 모든 속성이 기본 키 전체에 종속되어야 한다.
  • 즉 복합 키를 사용할 경우, 기본 키 일부에만 종속되는 속성을 제거하여 별도 테이블로 분리해야한다.
  • 이를 부분 함수 종속성을 제거한다고 한다.

3NF(제 3정규화)

  • 2NF를 만족하면서, 기본 키가 아닌 속성이 다른 기본키가 아닌 속성에 종속되지 않도록 한다.
  • 특성 속성이 다른 속성을 결정하는 경우 이를 분리하여 새로운 테이블을 만든다.
  • 이를 이행적 종속 제거라고 한다.
  • 4NF(제 4정규화)

  • 한 테이블 내에서 하나의 키가 여러 값을 가질 때, 다치 종속을 제거하여 별도의 테이블로 분리한다.

    5NF(제 5정규화)

  • 데이터를 여러 개의 테이블로 분해하더라도 다시 조인했을 때, 원래 데이터를 복원할 수 있도록 분해한다.

반정규화란

  • 정규화를 통해 분리된 테이블을 다시 합쳐서 성능을 개선하고 데이터 조회 속도를 높이는 과정이다

    반정규화 목적

  • 복잡한 조인을 줄여서 성능을 향상한다.
  • 데이터 조회 속도를 빠르게 한다.
  • 자주 사용되는 데이터를 미리 계산하여 저장한다.

반정규화 방식

  • 정규화된 테이블을 병합한다.
  • 중복 데이터를 추가한다.

반정규화 단점

  • 데이터 중복이 발생하는 단점이 존재한다.
  • 데이터 무결성 유지의 어려움으로, 한 곳에서 데이터 수정 시 동일 데이터가 있는 다른 테이블도 수정해야 한다
hyeon.s
@hyeon.s :: 개발로그
목차