Sad Puppy 3 데이터베이스 이론 :: 개발자 아지트

erd란?

: 개체-관계 다이어그램

엔티티, 속성, 관계를 시각적으로 표현하는 방법이다. 

 

엔티티: 현실 세계에서 독립적으로 존재하는 객체, 데이터베이스에서는 테이블로 표현됨

속성: 엔티티의 특성이나 데이터를 나타내며, 엔티티를 설명하고 식별하는데 사용됨

관계; 엔티티 간의 연결을 나타내며, 데이터의 흐름을 정의함 

 

제 1정규화 : 하나의 속성이 하나의 값을 가져야함. (각 테이블의 모든 열이 원자 값을 가짐)

제 2정규화: 기본 키가 아닌 열이 기본 키의 모든 부분에 전적으로 종속하도록 한다. 

제 3정규화: 기본 키에만 의존하지 않는 불필요한 데이터를 제거한다. 

더보기

제 3정규화: 기본 키에만 의존하지 않는 불필요한 데이터를 제거한다. 

기본 키에만 의존하지 않는 불필요한 데이터를 제거한다는 말은 데이터베이스에서 부분 함수 종속과 관련된 문제를 해결하는 것을 의미해. 이것은 데이터를 저장할 때 정보가 중복되지 않도록 테이블을 잘 설계하는 방법 중 하나야. 쉽게 말해서, 데이터를 효율적으로 정리하는 방법이라고 생각하면 돼.

  • 기본 키(Primary Key): 데이터베이스에서 각 줄(row)을 고유하게 식별하는 값이야. 예를 들어, 학생 명단에서는 학생마다 고유한 학생 번호가 기본 키가 될 수 있어. 학생 번호가 같으면 같은 학생이라고 보면 돼.
  • 부분 함수 종속: 테이블의 어떤 칼럼(열)의 값이 기본 키의 일부분에 의해서만 결정되는 상황을 말해. 예를 들어, "수업" 테이블이 있다고 해보자. 여기에는 학생 번호, 수업 코드, 학생 이름, 수업 이름 같은 칼럼이 있어.

문제 상황:

  1. 만약 학생 번호와 수업 코드를 합쳐서 기본 키로 삼는다면, 각 줄은 한 학생이 특정 수업을 듣고 있다는 것을 나타내.
  2. 여기서 학생 이름은 학생 번호에만 의존하고, 수업 이름은 수업 코드에만 의존해.
  3. 이런 상황에서 한 학생이 여러 수업을 들으면 학생 이름이 여러 줄에 반복돼서 저장될 수 있어. 마찬가지로 여러 학생이 같은 수업을 들으면 수업 이름도 반복돼서 저장돼.

해결 방법:

이런 불필요한 중복을 피하기 위해 테이블을 나누는 거야:

  • 학생 테이블: 학생 번호, 학생 이름
  • 수업 테이블: 수업 코드, 수업 이름
  • 수강 테이블: 학생 번호, 수업 코드

이렇게 테이블을 나누면, 각 테이블의 정보가 기본 키에만 의존하게 돼. 따라서 데이터의 중복을 줄이고, 정보가 변경될 때 모든 관련 데이터를 일일이 수정하지 않아도 돼.

이것이 바로 기본 키에만 의존하지 않는 불필요한 데이터를 제거하는 이유야. 이렇게 하면 데이터베이스가 더 효율적으로 관리되고, 오류도 줄일 수 있어.

BCNF: BCNF는 3NF에서 더 나아가 모든 결정자가 후보키가 되도록 한다. 

 

더보기
 

BCNF(Boyce-Codd Normal Form)라는 것은 데이터베이스 테이블을 아주 잘 정리된 상태로 만드는 기준 중 하나야. 

기본 개념들

  • 기본 키(Primary Key): 각 줄(row)을 고유하게 구분할 수 있는 값이야. 학생 명단에서는 학생 번호가 기본 키가 될 수 있어.
  • 후보 키(Candidate Key): 기본 키로 쓸 수 있는 모든 키들을 말해. 기본 키도 후보 키 중 하나야. 예를 들어, 학생 테이블에서는 학생 번호가 유일하다면, 학생 번호가 후보 키야.
  • 결정자(Determinant): 어떤 칼럼의 값이 다른 칼럼의 값을 결정한다면, 이때 앞의 칼럼을 결정자라고 해. 예를 들어, 학생 번호가 있으면 그 학생의 이름을 알 수 있다면, 학생 번호가 학생 이름의 결정자야.

3NF(제3정규형)

3NF는 데이터를 중복 없이 잘 정리하는 기준 중 하나야. 이 기준에 맞으려면 모든 비기본 속성이 기본 키에만 의존해야 해. 예를 들어, 학생 테이블에서 '학생 번호'로 학생 이름과 학년을 알 수 있다면, 그건 3NF야.

BCNF(보이스-코드 정규형)

BCNF는 3NF보다 조금 더 철저한 기준이야. 이 기준에 따르면, 테이블의 모든 결정자는 후보 키여야 해. 즉, 모든 속성을 결정하는 값은 반드시 후보 키여야 한다는 뜻이야.

예시로 이해하기

문제 상황

학생이 듣는 수업을 기록한 테이블을 생각해 보자.

학생 번호수업 코드강의실
1 MATH101 101A
2 SCI102 102B
1 SCI102 102B
  • 여기서 '수업 코드'가 '강의실'을 결정한다고 해보자. 그러니까 'MATH101'은 항상 '101A' 강의실에서 열려.

BCNF가 아닌 이유

이 테이블은 BCNF가 아니야. 왜냐하면 '수업 코드'가 '강의실'을 결정하는데, '수업 코드' 자체는 후보 키가 아니거든. 후보 키는 '학생 번호 + 수업 코드'가 돼야 해.

BCNF로 만들기

테이블을 다음과 같이 나누면 돼:

  1. 수업 테이블 (수업 정보만 따로 분리)수업 코드강의실
    MATH101 101A
    SCI102 102B
  2. 학생 수강 테이블 (학생과 수업 정보만 남김)학생 번호수업 코드
    1 MATH101
    2 SCI102
    1 SCI102

이렇게 나누면, 모든 결정자가 후보 키가 돼서 BCNF를 만족하게 돼!

요약

  • 3NF: 기본 키에만 의존하도록 중복을 제거하는 기준.
  • BCNF: 모든 결정자가 후보 키가 되도록 더 철저하게 정리하는 기준.

이렇게 하면 데이터의 일관성을 유지하고, 오류를 줄일 수 있어. 이런 방식으로 데이터를 정리하는 것은 데이터베이스를 관리하는 중요한 방법이야!

 

제 4정규화: 다치 종속을 제거하여 중복을 줄임

더보기

4NF(제4정규형)은 데이터베이스를 정리할 때 다치 종속(Multi-Valued Dependency)을 제거하여 중복을 더 줄이는 방법이야. 

기본 개념들

  • 다치 종속(Multi-Valued Dependency): 한 속성이 여러 값과 연관될 수 있는 상황이야. 예를 들어, 학생이 여러 과목을 들을 수 있고, 또 여러 활동을 할 수 있다고 해보자. 여기서 학생은 과목과 활동에 다치 종속성을 가질 수 있어.

예시로 이해하기

문제 상황

학생의 수업과 활동을 기록한 테이블이 있다고 해보자.

학생 이름과목활동
철수 수학 축구
철수 영어 축구
철수 수학 수영
철수 영어 수영
  • 철수가 듣는 과목은 수학과 영어야.
  • 철수가 하는 활동은 축구와 수영이야.

중복 문제

이 테이블에는 중복이 많아. 철수가 수학을 듣는다는 정보와 축구를 한다는 정보가 여러 번 반복돼. 이렇게 되면 데이터가 많아지고, 수정하기도 불편해.

다치 종속 해결

4NF는 이런 중복을 없애기 위해 테이블을 나누는 방법이야.

  1. 학생과 과목 테이블 (학생이 듣는 과목만 기록)학생 이름과목
    철수 수학
    철수 영어
  2. 학생과 활동 테이블 (학생이 하는 활동만 기록)학생 이름활동
    철수 축구
    철수 수영

이렇게 나누면 철수가 듣는 과목과 하는 활동이 각각 따로 기록돼서 중복이 줄어들어!

요약

  • 다치 종속: 한 속성이 여러 값과 관련 있는 경우.
  • 4NF: 다치 종속을 제거하여 데이터의 중복을 줄이고, 관리하기 쉽게 만드는 방법.

이렇게 데이터를 정리하면 정보가 깔끔하게 저장되고, 나중에 변경하거나 확인할 때 더 편리해져!

 

제 5정규화: 더 이상 분해를 할 수 없을 때 까지 테이블을 분해한다. 

 

 

 

+ Recent posts