일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- aws #아키텍트 #과정 #vpc #인프라 구축 #public subnet #private subnet
- 비트 #바이트 #이진수
- storage #로컬스토리지 #세션스토리지 #백그라운드 서비스
- aws #아키텍트 #과정 #vpc #인프라 구축 #public subnet #internet gateway #연결
- 스파르타코딩클럽 #부트캠프 #IT #백엔드 #머신러닝 #AI #서버 #자동화 #SQL #기본문법 #데이터베이스 #웹개발
- mysql #linux #설정 #wordpress #웹사이트 #db 연결 #
- aws #클라우드 #퍼블릭 클라우드 #아키텍트 #과정
- virtualbox #vmware #router #nat #pat #네트워크 구성도 #aws #ubuntu #
- 스파르타코딩클럽 #부트캠프 #IT #백엔드 #머신러닝 #AI #서버 #자동화 #SQL #KDT #기본문법 #데이터베이스 #Computer #Science #CPU #메모리
- 공간복잡도 #공간자원 #캐시메모리 #SRAM #DRAM #시간복잡도
- 프로세스 #CPU #시공유 #커널
- aws #아키텍트 #과정 #s3 #bucket #생성 #이미지업로드
- haproxy #wordpree #php #linux #가상화 #가상머신 #내용정리
- aws #아키텍트 #과정 #vpc #인프라 구축 #public subnet #igw #curl #명령어 #http
- 스파르타코딩클럽 #부트캠프 #IT #백엔드 #머신러닝 #딥러닝 #AI #서버 #자동화 #SQL #기본문법 #데이터베이스 #DBMS #Oracle #MongoDB #아키텍쳐 #DB
- oracle vmbox #rocky #linux9 #명령어 #암호화인증 #해시알고리즘
- tar #build #배포 #통신포트 #설정방법 #linux #apache
- 쓰레드 #쓰레드풀 #프로세스
- aws #아키텍트 #과정 #vpc #인프라 구축 #퍼블릭 서브넷 #안에 #ec2 인스턴스 #ami #생성 #firewall
- ubuntu #설정변경 #vmware #vmbox #linux #명령어
- samba #가상머신 #daemon
- 스파르타코딩클럽 #부트캠프 #IT #백엔드 #머신러닝 #딥러닝 #AI #서버 #자동화 #SQL #기본문법 #데이터베이스
- sasac #aws 클라우드 #아키텍트 과정 #가상화 #vmbox #vmware #esxi #tar #selinux
- aws #아키텍트 #과정 #vpc #인프라 구축 #public subnet #route53 #igw #연결
- 스파르타코딩클럽 #부트캠프 #IT #백엔드 #머신러닝 #AI #서버 #자동화 #SQL #기본문법 #데이터베이스
- aws #아키텍트 #과정 #vpc #인프라 구축 #php #웹페이지 #http #public #instance
- 스파르타코딩클럽 #부트캠프 #IT #백엔드 #OSI #ISO #AI #서버 #자동화 #SQL #기본문법 #데이터베이스 #DBMS #Oracle #MongoDB #아키텍쳐 #DB
- aws #아키텍트 #과정 #vpc #인프라 구축 #퍼블릭 #보안그룹 #생성 #http #ipv4
- aws #아키텍트 #과정 #vpc #인프라 구축
- 인바운드 #아웃바운드 #방화벽설정
- Today
- Total
요리사에서 IT개발자로
(스파르타 코딩클럽) RDBMS 정규화 본문
RDBMS에서 정규화(Normalization)란
데이터베이스 설계에서 중복을 제거하고 데이터 중복을 최소화하여
데이터 베이스를 효율적으로 설계하는 과정이다.
중복된 데이터를 허용하지 않음으로써 무결성(Integrity)를 유지할 수 있고, DB의 저장 용량 역시 줄일 수 있다.
이를 하지않으면 이상 현상(Anomoly)이 발생한다.
이상 현상이란
정규화를 적절히 하지않은 DB 또는 Relation(Table)에 데이터가 중복되고
이 Table에 어떠한 작업을 할 때 비 합리적인 문제들이 발생하는 현상
Raltion은 행(Row), 열(Column)로 구성된 Table을 의미한다.
이상 현상 | 설명 |
삽입이상 | 데이터를 테이블에 저장할 때, 불필요한 데이터도 넣어야하는 경우 |
삭제이상 | 데이터를 테이블에서 삭제할 때, 원하지 않는 데이터도 같이 삭제되는 경우 |
갱신이상 | 중복된 데이터 중에서 특정 부분만 수정되어 값이 모순을 일으키는 경우 |
삽입이상
스키마로 정의된 Table에 DB를 삽입시 그중에 하나라도
Null값이 존재하면 입력할 수 없다.
삭제 이상
정의된 DB의 데이터 중 일부를 삭제를 하게 될 시 전부 삭제된다.
갱신이상
해당 데이터의 일부를 변경할 때 그 전의 데이터는 삭제된다.
위와 같이 RDBMS에서 정규화를 제대로 하지않은 테이블의 이상현상이 발생한다.
정규화
1차 정규화는 원자값으로 구성이 되어있다.
위 테이블에서 한 Jason에게 두개의 Email이 붙어있다.(원자값으로 구성 X)
Jason이 하나의 Email주소를 변경하면 기존 Email값에서 변경된 값을 찾아 다시 넣어줘야 하거나
다 가져와서, 덮어쓰기를 하거나 문제가 발생할 수 있다.(중복값 발생 가능)
그래서 아래 Table처럼 나눠줘야만 원자값으로 구성했다고 볼 수 있다.
2차 정규화(2NF) - 부분함수 종속제거
위 테이블에서 UserName과 Sports가 Term으로 묶여 있다.
UserName은 Many, Sports도 Many일 수 있다.
둘이 테이블간의 관계를 맺어야 Term이 정해진다.(Term은 보는 주기)
Sports와 Price는 경기과 가격 연관을 맺고
User와 Term을 연관맺어서
부분적으로 연관 되어 있는 두값을 나누는게 2차 정규화이다.
3차 정규화 - 이행함수 종속 제거
위 이미지에서 왼쪽 사진을 보았을 때의 문제
1번째에서 밑으로 2차 정규화로 나누었다.
해당 Snack의 생산 Brand가 바뀐다면 Address를 변경해줘야 하기에 갱신 이상이 발생할 수 있다.
Brand 테이블은 따로 나누어 관리 해줘야 3차 정규화를 만족시킨다.
보이스 - 코드 정규화(BCNF : Boyce -Codd NF) - 결정자 함수이면서 후보키가 아닌것은 제거한다.
보이스 - 코드 정규화는 3.5차 정규화라고 불린다.
Table을 위와 같이 작성하고 학생번호와 과목을 하나의 기본키로 본다면, Teacher를 식별할 수 있다.
선생님은 과목과 연관이 되어 있다.
선생님은 테이블에서 중복될 수 있다.
중복이 가능하다는 것은 키로써 역할을 못한다. (후보키가 될 수 없다.)
선생님이 가르치는 과목들 중에 학생이 없을 수도 있다는것과.
한 선생님이 여러 과목을 가르칠 수 있다.
그래서 아래 테이블 처럼 나누어 줘야된다.
StudentId와 Class를 맺고 Class와 TeacherId를 연간을 맺어야 이상현상을 막을 수 있다.
선생님의 수업의 유저(FK)를 Null로 저장할 수는 없다.
4차 정규화(4NF) - 다중값 종속 제거
다중값이란 여러개라는 뜻
위의 테이블에서 첫번째 테이블은 개발자는 많은 자격증을 가질 수 있고 많은 언어를 사용할 수 있다.
자격증과 언어를 합쳐 놓는다면. 이상현상이 발생한다.
해당 개발자의 언어를 조회하는데 자격증이 같이 조회된다.
개발자가 새로운 자격증을 취득하여 Row를 추가하면 언어에도 어떤값이든 추가해줘야한다.
개발자의 자격증이 만료되면 언어를 삭제할것인가?
그래서 개발자를 기준으로 중복된 값을 허용할 수 있게 나누어줘야한다.
5차 정규화(5NF) - 조인 종속성 제거
조인 종속성이란
4차 정규화가 된 테이블들을 Join연산 할 경우 정규화 이전의 Table값이 달라지는 경우
조인 또는 정규화 과정에서 Data가 손실되어 결과가 달라지는것
조인을 하였더니 Sam이 2명이였는데 4명이 되었다.
이를 정상적으로 해결한다면.
https://blog.naver.com/jinsol1/100024608148
'TIL' 카테고리의 다른 글
(스파르타 코딩클럽)브라우저의 작동방식 (4) | 2024.07.23 |
---|---|
(스파르타 코딩클럽) CORS란 (0) | 2024.07.23 |
(스파르타 코딩클럽) HTTP 메서드란 (0) | 2024.07.22 |
(스파르타 코딩클럽) mvc 패턴이란 (0) | 2024.07.19 |
(스파르타 코딩클럽) NoSQL과 RDBMS의 특징과 차이점 (0) | 2024.07.18 |