데이터 정규화
- 데이터베이스 내의 데이터 구조를 조직화하고 최적화하는 과정
- 정규화 사용은 데이터 중복을 제거하고, 효율성을 향상시키며, 데이터 무결성을 보장하기 위함이다.
- 필수적으로 하지 않아도 되지만, 장점이 큰데 사용하지 않을 이유 없다.
정규화 거치지 않을 시 발생할 수 있는 이상 종류
1. 삽입 이상
- 데이터 삽입 시 의도와 다른 값도 삽입
2. 삭제 이상
- 데이터 삭제 시 의도와 다른 값들도 연쇄 삭제
3. 갱신 이상
- 속성값 갱신 시 일부 튜플만 갱신되어 모순 발생
제1 정규화
- 한 칸에 데이터 1개
- 각 컬럼은 하나의 데이터만 저장하며, 다중 값을 갖지 않는다.
제1 정규화 적용 전
학생번호 | 학생이름 | 수강과목 |
20240001 | 김철수 | 자바 |
20240002 | 김영희 | C언어 |
20240003 | 홍길동 | C언어, 파이썬 |
- 데이터의 중복 발생이 가능
- 데이터의 수정, 삭제, 삽입 연산에 이상 문제가 있을 수 있다.
발생할 수 있는 이상현상
- 갱신 이상
홍길동의 C언어를 다른 과목으로 바꿀 경우 김영희가 듣고 있는 C언어 과목도 바뀔 가능성 - 삭제 이상
홍길동의 C언어 과목만 수강 취소 할 경우 김영희가 듣고 있는 C언어 과목도 취소될 가능성
제1 정규화 적용 후
학생번호 | 학생이름 | 수강과목 |
20240001 | 김철수 | 자바 |
20240002 | 김영희 | C언어 |
20240003 | 홍길동 | C언어 |
20240003 | 홍길동 | 파이썬 |
- 데이터의 중복 크게 줄어들고 공간적 효율성이 향상
제2 정규화
- 현재 테이블과 주제가 맞지 않는 컬럼은 다른 테이블로 이동
제2 정규화 적용 전
학생번호 | 학생이름 | 수강과목 | 가격 | 수강완료 |
20240001 | 김철수 | 자바 | 300,000 | 0 |
20240002 | 김영희 | C언어 | 400,000 | 1 |
20240003 | 홍길동 | C언어 | 400,000 | 0 |
20240003 | 홍길동 | 파이썬 | 350,000 | 1 |
발생할 수 있는 이상 현상
- 삽입 이상
- 학생 중 또 다른 수강 과목을 등록한다면 구조상 학생과 연관된 컬럼도 채워야 하는 문제가 발생, 원하는 정보만 추가할 수 없는 것
- 수정 이상, 삭제 이상
- 수정 또는 삭제 했을 시 학생 관련 정보가 일부만 수정되거나 원하지 않는 정보까지 삭제되는 문제가 발생
제2 정규화 적용 후
<수강생 등록 현황 table>
학생번호 | 학생이름 | 수강과목 | 수강완료 |
20240001 | 김철수 | 자바 | 0 |
20240002 | 김영희 | C언어 | 1 |
20240003 | 홍길동 | C언어 | 0 |
20240003 | 홍길동 | 파이썬 | 1 |
<과목 table>
수강과목 | 가격 |
자바 | 300,000 |
C언어 | 400,000 |
파이썬 | 350,000 |
- 중복이 줄어들고, 데이터 무결성이 유지된다.
- 전체적인 데이터 관리 및 유지 보수가 향상된다.
제3 정규화
- 일반 컬럼에만 종속한 다른 컬럼을 다른 테이블로 이동
수강과목 | 가격 | 강사 | 출신대학 |
자바 | 300,000 | 김철수 | a |
C언어 | 400,000 | 김영희 | b |
파이썬 | 350,000 | 박영수 | c |
DBMS | 400,000 | 박영수 | c |
프론트엔드 | 500,000 | 김철수 | a |
삽입, 수정, 삭제 이상
<과목 table>
수강과목 | 가격 | 강사 |
자바 | 300,000 | 김철수 |
C언어 | 400,000 | 김영희 |
파이썬 | 350,000 | 박영수 |
DBMS | 400,000 | 박영수 |
프론트엔드 | 500,000 | 김철수 |
<강사 table>
강사 | 출신대학 |
김철수 | a |
김영희 | b |
박영수 | c |
- 각 테이블은 원자적인 값을 가지게 되고 데이터 중복이 줄어든다.
- 이상 현상을 피할 수 있으며 유지 보수가 훨씬 용이해진다.
비정규화
- 정규형을 지키면 이상 현상을 방지할 수 있고, 테이블의 구조를 수정하고 이해하기 편하다는 장점이 있지만 테이블이 나뉘어 있기 때문에 속도가 느리고, 성능이 저하될 수 있다.
이럴 경우 다시 정규형을 지키지 않는 테이블로 만드는 것
트랜잭션(transaction)
- 데이터베이스의 상태를 변화시키기 해서 수행하는 작업의 단위
Start transaction
.
.
Rollback -> start transaction 부분으로 작업 되돌리기
.
.
Commit -> 문제 없을 경우, 사용하면 다시 rollback 해도 그 상태 그대로
'MySql' 카테고리의 다른 글
MySQL(07.15) - SHA-256, 암호화, 복호화, UUID(), Cache 데이터, 데이터 구조, Primary key, err (0) | 2024.07.15 |
---|---|
MySQL(07.15) - 인덱스(INDEX) (0) | 2024.07.15 |
MySQL(07.12) - 다중컬럼 IN, GROUP_CONCAT, GROUP BY, HAVING, WHERE, 삼항연산자, SUB QUERY(SCALAR, INLINE) (0) | 2024.07.12 |
MySQL(07.11) - MySQL(Alias, SELF JOIN, OUTER JOIN, SubQuery) (0) | 2024.07.11 |
MySQL(07.10) - SQL 활용(문법) (0) | 2024.07.10 |