본문 바로가기
Database/SQL

정규화 Normalization (제 1~3 정규화)

by 재성스 2023. 10. 13.
반응형

정규화 Normalization (제 1~3 정규화)

정규화란?

  • 데이터베이스 설계 프로세스에서 데이터를 구조화하고 조직화하는 과정을 나태는 것
  • 데이터의 중복을 최소화하고 데이터의 일관성을 유지하며 DB의 효율성을 향상 시키는 것이 목적
  • 제 1,2,3 정규형, BC 정규형, 4,5 정규형이 있음.

제 1 정규화 (FIRST NORMAL FORM) 1NF)

  • 원자적 데이터를 가진 테이블, PK 컬럼이 있어야 한다

.

-- PRIMARY KEY(주키, 기본키, PK)
CREATE TABLE my_table27(
    id INT PRIMARY KEY,
    name VARCHAR(20)
);

-- 또는 !!

CREATE TABLE my_table28(
                         id INT,
                         name VARCHAR(10),
                         PRIMARY KEY (id)
);

제 2 정규화 (SECOND NORMAL FORM) 2NF)

  • 1NF + 부분적 함수 의존이 없어야 함.
  • 부분적 함수 의존(partial functional dependency)
    • 키가 아닌 컬럼의 값이 키 컬럼 일부에만 종속되지 않고 완전 종속되어야 한다.
    • 키의 일부가 변경되면 키가 아닌 컬럼이 변경되어야 하면 부분적 함수 의존

제 3 정규화 (THIRD NORMAL FORM) 3NF)

  • 2NF(함수적 종속성 X) + 이행적 종속이 없어야함.
  • 이행적 종속(transiticve dependency)
    • 기본키와 키가 아닌 다른 컬럼을 다중적으로 의존하는 것을 이행적 종속이라고 말함.
    • 즉 키가 아닌 컬럼이 변경되었을 때 다른 컬럼도 변경되어야 한다면, 이는 변경된 컬럼에도 종속성이 있다는 것을 의미한다.

이행적 종속 관계가 있는 테이블 예시

CREATE TABLE my_table30_person
(
    id             INT PRIMARY KEY AUTO_INCREMENT,
    name           VARCHAR(10),
    school         VARCHAR(10),
    school_address VARCHAR(10)  -- 학교 주소는 학교 컬럼에 종속함.

);
  • 학교 주소는 학교 컬럼에 이행적 종속성이 있으므로, 제 3정규형에 만족하지 않는다.
  • 이를 해결하기 위해, 이행적 종속 관계에 있는 컬럼간 분리가 필요함.

이행적 종속 관계를 없앤 테이블의 예시

CREATE TABLE my_table31_person
(
  id     INT PRIMARY KEY AUTO_INCREMENT,
  name   VARCHAR(10),
  school VARCHAR(10)
);

CREATE TABLE my_table32_school
(
  id      INT PRIMARY KEY AUTO_INCREMENT,
  name    VARCHAR(10),
  address VARCHAR(10)
);
  • 이행적 종속 관계는 없어졌으나 테이블간 관계성을 나타내는 부분이 없다.
  • 따라서, 하나의 테이블이 다른 테이블을 참조하도록 해야하며, 이를 위해 필요한 KEY가 외래키 (foreign key )이다.
    ```sql
    CREATE TABLE my_table35_person
    (
    id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(10),
    school_id INT REFERENCES my_table36_school(id)
    );
    • 한테이블의 컬럼이 다른 테이블을 참조하면 pk를 사용해야함
    • 이것을 외래키(foreign key) 제약사항이라고 말함.

CREATE TABLE my_table36_school
(
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(10),
address VARCHAR(10)
);

* 외래키는 참조키 또는 FK라고도 불리며, 외래키가 설정된 열은 꼭 참조하는 테이블의 기본키와 연결되어야 한다.
```sql
    school_id INT REFERENCES my_table36_school(id)
반응형

'Database > SQL' 카테고리의 다른 글

서브 쿼리 - MariaDB/SQL  (0) 2023.10.13
상관쿼리와 비상관쿼리 - MariaDB/SQL  (2) 2023.10.13
MariaDB /SQL - 문법 모음  (0) 2023.10.13