※ Keep in mind
본 내용은 웹개발과정의 강의 중 내용을 복습을 위해서 메모한 것에 불과한 것입니다. 이러한 연유로 강의내용을 오인한 나머지 오기재 및 불기재가 있을 수 있으니 '참고'만 해주시길 바랍니다. 저의 경우에도 본 내용을 단순하 읽은 것이 결코 저의 것이라고 생각하지 않습니다. 본 내용은 복습를 위한 초기 내지 중간 과정에 불과한 것이고, 이후에 내용을 보충 후 인출 및 설명하기 과정이 있어야 비로소 복습의 단추가 어느정도 마무리 되어간다고 볼 수 있습니다.
따라서 당초에 본 내용은 비공개였습니다. 그럼에도 불구하고 본 내용을 공개한 점은 함께 공부하는 동료들과 나눔을 바탕으로 배움과 성장의 공진화라는 소기의 목적을 달성에 어느정도 도움이 될수 있기 때문이라고 생각합니다.
I. DB
1. DB 정규화
(1) 정규화란
1)
정규화란 중복된데이터를 제거하는것을 목적으로 하는거야
논리설계해도 중복데이터를 가질 수있는 구조일 수있어! 중복된 컬럼이 아니야 중복된 데이터야!
즉 데이터를 넣었다고 가정했을 때를 의미해 이 경우에 테이블을 잘라낼 필요가 있어
정규화 하면 테이블이 더 잘게 찢어져 왜냐하면 중복된 데이터 때문이야
정규화 하고나면 테이블은 더 쪼개어진다.
정규화가 크게 4단계가 있어 그런데 순서가 존재하지는 않고 네가지 종류로 가능해
(2) 1정규화
1)
1정규화란 모든 도메인이 원자 값으로 이루어 져야한다
도메인은 유효한 범위의 값을 의미하는거야
도메인은 컬럼으로 이해하면 편해! 변수 혹은 변량 혹은 도메인 혹은 필드이다. 같은 것을 상황에 따라 다르게 부르는거야
결국 1정규화란 컬럼의 값이 하나만들어와야 한다는 뜻이야
홍길동이 두번들어오면안돼? '글짜'로서 중복이 아니라, 같은 '의미'로서 두번 들어오면 안된다는 의미야!
여기 그림에 같은 사람을 두번입력한거야 그래서 ID가 동일하게 '1' 이 2개야
이런경우에는 Email을 잘라서 자식관계로 별도로 만들어야 해!
2)
1정규화는 중복을 제거하는거야
중복되는 것을 없게해야한다
만약 이메일을 실무자에게 하나만 넣냐? 아니 여러개라고 하면 N개가 들어와! N개는 잘라내야해
여기서 1정규화 위반인지 확인하자
아니면 앞서본 것처럼 중복된 데이터가 생겨버려
N개가 들어올거같은 녀석을 찾자!
나는 이메일, 담당자명, 휴대폰번호,세금계산서용 이메일 / 은행,계좌번호
일수도있는데 실무자한테 들어보아야해
예컨데 쇼핑에 상품에 이미지가 여러개이면, 데이터가 중복이 생겨 이미지의 경우 별도로 해야해
N개 얘네들은 따로 떼야해
뗀다는것은 테이블을 따로만드는것이고 자식테이블로 부모와 관계가 있어
N쪽이 자식이야 N쪽이 부모가 될 수없어 1부분이 부모야
3)
최대 몇번이라고 하면 잘라내야해
이 경우 잘라내야해
안자르고 만약 구분자로 구분하는 방식으로도 가능하긴해. 만약 이런경우에는 쿼리문 작성에 어려움이 생기고, 자바에서를 넘어서 직접 DBMS를 이용해야하는 경우가 생겨
4)
중복제거하는 관점에서 1정규화와 유사한게 3정규화야 뒤에
댓글내용, 댓글등록일자, 신고일자, 신고내용, 첨부파일명,첨부파일용도 이런게 생각했다.
이전에 2정규화를 생각하자
(3) 2정규화
부분적 함수종속성 제거
댓글은 다대다 관계가 풀려서 만들어진 테이블이야
이렇게 만들어진것을 action entity라고해
다대다 관계면 외래키가 2개가 들어가
수학에서 함수라는것은 복잡한 것을 쉽게 표현하는거야
DB에서 함수는 외래키를 의미한다.
(함수종속성은 A를 알면 B가 유일하게 결정되는것을 의미한다 이 경우 A는 B의 결정자라고 볼 수 있다. 학생번호를 알면 학생이름이 정해진다)
외래키가 함수야 외래키가 누구이든 참조하는 애가 연산식이야
수학에서와 마찬가지로 데이터에서도 이를 대신하는게 존재할 수있는데 이게 외래키야
FK는 공지사항아아디(FK) 와 작성자아이디(FK)가 있다.
이 경우 FK중 특정부분인 공지사항아이디만(FK)으로도 공지제목의 결정자가 될 수있어
이 데이터는 공지사항에 있어야해
즉 공지사항제목은 이미 왼쪽 테이블에 있어 여기로 보내자는 의미야
(4) 3정규화
1)
이행적 함수 종속
함수는 외래키야
이행적 함수(A->B->C)에서 다른 녀석(B) 통해서 함수(C)로 접근해서 간다는것인데, 결국 '이행적함수'는 '함수'가 아냐
얘와 관련된 외래키가 따로있는 것이야
우리는 다른 데이터 참고하기 위해서 외래키를 쓰지?
2)
< 2NF >
2정규화에서는 기본키(복합키) / 3정규화에서는 외래키
2정규화는 부분적인 외래키에만 종속된 녀석이 속성에 있는 경우를 의미하는거야
< 3NF >
정규화는 속성안에서 연달아 있는 경우야 아이디 ->공지사항아이디(아이디가 결정자) -> 공지제목(공지사항아이디가 결정자)
한번더 건너서 가는 키가 여기 있으면 안된다는 의미야
3단논법 쪼개기
3정규화에서 쪼개어지면 부모가 되는거야
3) BCNF
- 부분적함수 종속을 대리키 (식별자가 너무 길거나, 여러속성으로 구성된 경우 인위적으로 추가하는 식별자 키)로 만들어서 내렸는데, 이 경우 이행적 함수종속이 생겨버려
업체관련 테이블인데 우측에 중복되어있어
이행,부준적함수종속도 아냐 함수(외래키)가 없어 그냥 중복이야
이 경우 잘라내는 경우 앞 부분(고객테이블)에 다 / 뒤 부분(회사테이블)이 1이야
이런경우 별개의 테이블로 두면 돼!
(5) 예시
1) 1NF
포트폴리오 테이블에서
기술스택, 이미지 속성, 프로젝트 종류의 도메인종속성 제거
-> 기술스택 테이블 (아이디, 이름, 포폴ID)
-> 이미지 테이블(아이디, 이름, 순서, 포폴ID)
-> 종류 테이블 (아이디, 종류 , 포폴ID)
2) 2NF
복합키가 없어서 무방해
3) 3NF
이행적 함수 종속 있는지
(5) 4정규화
이미 다대다로 쪼개어진거라서 충분해
2. 제약조건
(1) 들어가며
1) 필요함
1. 보충
(1)
https://mangkyu.tistory.com/110
2. 회고
1) 정규화를 막상하면서 필요성을 느끼는것은 좋다
2) 다만 비슷한것들이 나오니 얘가 얘같고 쟤가 쟤같다
3) 도메인종속성제거라는건 중복을 제거하는것으로서 하나의 식별되는자가 N개로 입력하는 경우에 필요한것
4) 부분적함수종속제거는 복합키 중 일부가 다른것들 결정하는 경우
5) 이행적함수종속제거는 삼단논법관계를 끊어내는것
6) 결정자이면서 후보키가 아닌것제거는 관련없지만 방향을 반대로 결정하는것을 제거하는 경우를 의미한다.
'배움 __IL > TIL 1기' 카테고리의 다른 글
TIL : 70번째- 230316 [3-2-목] (0) | 2023.03.16 |
---|---|
TIL : 69번째- 230315 [3-2-수] (0) | 2023.03.15 |
TIL : 67번째- 230313 [3-2-월] (0) | 2023.03.13 |
TIL : 66번째- 230310 [3-1-금] (0) | 2023.03.10 |
TIL : 65번째- 230309 [3-1-목] (0) | 2023.03.09 |