데이터베이스 - 데이터 정규화

Jobmania·2023년 2월 21일
0

데이터베이스

목록 보기
2/4
post-thumbnail

1. 제 1 정규형

- 수강 등록 현황 테이블

회원번호(PK)이름프로그램
10강호동씨름
11윤성빈수영
12설기관헬스

만약 유재석이 헬스를 등록한다면??

회원번호(PK)이름프로그램
10강호동스쿼시 초급
11윤성빈헬스
12유재석헬스, 골프초급

이렇게 회원 테이블을 구성한다면 ...?

단점

  1. 골브 조회시 추가적인 sql 필요
    WHERE 프로그램 = '골프초급' (X)
    WHERE 프로그램 = '골프초급' LIKE '%골프초급%' (O)

  2. 이후 골프초급의 이름명이 변경 될때에도 수정이 어려워짐. 또한 성능문제 역시 발생.

그래서 제 1정규화란? => 한칸엔 하나의 데이터만!!

개선한 테이블은

회원번호(PK)이름프로그램
10강호동스쿼시 초급
11윤성빈헬스
12유재석헬스
12유재석골프초급

하나의 칸에 하나의 데이터만을 만족하는 테이블 = 제 1 정규형 테이블

2. 제 2 정규형

이후 추가적인 기능이 필요해 아래와 같이 가격 및 납부기능도 추가하였다.

이후 헬스에 대한 가격 수정이 발생하면?

회원번호(PK)이름프로그램가격납부여부
10강호동스쿼시 초급50000
11윤성빈헬스6000 -> 80001
12유재석헬스6000 -> 80001
12유재석골프초급80000

EX) 6000 -> 8000원 가격 변경이 필요
만약 헬스 수강생 인원이 만명일때, 만개의 행이 수정이 필요하게됨

제 2 정규형 => 현재 테이블의 주제와 관련없는 컬럼을 다른 테이블로 빼는 작업.

프로그램 - 가격 테이블을 따로 만들어 가격주제를 분리

회원 등록 현황 테이블

회원번호(PK)이름프로그램납부여부
10강호동스쿼시 초급0
11윤성빈헬스1
12유재석헬스1
12유재석골프초급0

프로그램- 가격 테이블

프로그램가격
스쿼시 초급5000
헬스6000 -> 8000
골프 초급8000

👨‍🏫 동일하게 헬스의 가격을 변경하더라도 한 행만 변경해도 됨

다만 조회시 JOIN을 통해 테이블끼리 연결을 해야함
EX) 윤성빈의 프로그램 가격을 조회 =>

SELECT * FROM 회원등록테이블 A JOIN 프로그램-가격테이블 B ON A.프로그램 = B.프로그램

++ 제 2정규형의 정확한 정의 partial dependency를 제거한 테이블

noSql은 비관계형db들은 데이터 정규화를 안하는 편!

3. 제 3 정규형

회원번호(PK)이름프로그램납부여부강사대학
10강호동스쿼시 초급0도덕희해양대
11윤성빈헬스1윤정인부경대
12유재석헬스1윤정인부경대
12유재석골프초급0박지인서울대
13엄지식골프중급0조민국서울대

-> 해당 대학 컬럼은 강사 컬럼에 종속적임

제 3정규화 : 일반컬럼에만 종속된 컬럼은 다른 테이블로 빼기

회원번호(PK)이름프로그램납부여부강사
10강호동스쿼시 초급0도덕희
11윤성빈헬스1윤정인
12유재석헬스1윤정인
12유재석골프초급0박지인
13엄지식골프중급0조민국

강사 테이블

강사대학
도덕희해양대
윤정인부경대
박지인서울대
조민국서울대

장점과 단점 역시 제 2정규화와 유사하게 수정은 용이, 조회시 join 필요..

4~ 5 정규화까지 있기 때문에 이후 내용도 작성필요

참고

profile
HelloWorld에서 RealWorld로

0개의 댓글