1 . 정규화
- Normalization
- 데이터베이스 테이블을 효율적으로 구조화하는 작업
- 중복 데이터를 줄이고 데이터가 꼬이지 않게 테이블을 나누는 과정
1 -1 . 정규화 단계
( 오늘 수업은 1~3단계까지 진행)
- 제1 정규형(1NF) : 하나의 칸에는 하나의 값만 들어가야 함 -> 원자값이 아닌 도메인 분해
- 제2 정규형(2NF) : 1NF를 만족하고, 기본키 전체에 완전 종속되어야 함, 부분적 함수 종속 제거
- 제3 정규형(3NF) : 2NF를 만족하고, 이행적 함수 종속 제거해야 함
- BCNF 정규화(BCNF) :결정자이면서 후보키가 아닌 것 제거
- 제4 정규형(4NF) :다치 종속 제거
- 제5 정규형(5NF) :조인 종속성 이용
- 이행적 종속 : A -> B, B -> C, A -> C
2 . 이상 현상
- 정규화가 제대로 되지 않은 테이블에서 발생하는 데이터 불일치 문제를 의미
- 수정 이상 : 같은 데이터가 여러 행에 중복 저장되어 있을 때 일부만 수정하면 데이터 불일치가 발생하는 현상
ex) 가게 이름 '과일가게' 과일 이름 '바나나' 원산지 '베트남' 판매처 번호 '010-0000-0000'와 가게 이름 '과일가게' 과일 이름 '망고' 원산지 '베트남' 판매처 번호 '010- 0000-0000'가 있다고 가정했을 때 전화번호가 '010-1111-1111'로 변경되었는데 한 행만 수정하면 같은 가게의 판매처 번호가 서로 달라지는 문제 발생
- 삭제 이상 : 특정 정보를 삭제할 때 원하지 않는 다른 정보까지 함께 삭제되는 현상
ex) 가게 이름 '과일가게1' 과일 이름 '바나나' 원산지 '베트남' 판매처 번호 '010-0000-0000'와 가게 이름 '과일가게2' 과일 이름 '망고' 원산지 '베트남' 판매처 번호 '010- 0000-0000'가 있다고 가정했을 때 '바나나'를 삭제했을 때 '과일가게2'라는 가게 이름의 정보도 함께 사라짐
- 삽입 이상 : 새로운 정보를 삽입하려 할 때 불필요한 정보가 없으면 삽입할 수 없는 현상
ex) 가게 이름 '과일가게1' 과일 이름 '바나나' 원산지 '베트남' 판매처 번호 '010-0000-0000'와 가게 이름 '과일가게2' 과일 이름 '망고' 원산지 '베트남' 판매처 번호 '010- 0000-0000'가 있다고 가정했을 때 새로운 가게인 '과일가게3'의 정보를 추가하려고 해도 과일 이름이 정해지지 않아서 '과일가게3'의 정보만 저장할 수 없음
3 . 정규화 예시

- 제 1 정규화, 2 정규화, 3 정규화 진행 상황
- 비정규화 테이블

- 정규화 진행

4 . references - 참조
- 기존 member 테이블 사용
- 새로운 테이블인 profile 생성

- profile 테이블에 데이터 넣기

5 . join
- join => 두 테이블을 연결할 때 사용
- inner join : 교집합
- left join : 왼쪽 테이블을 기준으로 연결
- right join : 오른쪽 테이블을 기준으로 연결
- cross join : 하나의 값에 다른 테이블의 모든 내용 연결, 곱집합
- 멤버 테이블의 아이디, 이름, 성별과 프로필 테이블의 엠비티아이를 한 번에 출력하기
- inner join 사용

- left join 사용

- right join 사용

- cross join 사용 -> 다른 컬럼 사용한 예제

=> 이 4개의 조인 중 값이 같은 조인은 inner join과 right join이다
'DBMS' 카테고리의 다른 글
| 5 . 사용자 계정 (0) | 2026.06.08 |
|---|---|
| 6 . MySQL 함수 (0) | 2026.06.08 |
| 4 . 서브쿼리 (1) | 2026.06.08 |
| 2 . SQL (0) | 2026.06.05 |
| 1 . 데이터베이스 기초 (DB, DBMS, RDBMS, SQL) (0) | 2026.06.04 |