앞으로의 목표 👍


  1. javascript 능력 및 고난도 알고리즘 풀이 능력
  2. Nest, Graphql등 최신 기술 스택 활용 능력
  3. 기초 미니프로젝트 포트폴리오
  4. 로그인, 결제기반 심화프로젝트 포트폴리오
  5. 배포를 위한 네트워크 및 CI/CD 배포자동화 능력
  6. 120% 백엔드 개발 지식

오늘부터 꾸준히 해야할 일 👍


  • 영타실력 늘리기
  • 단축키 사용 익숙해지기
  • 코드리딩 실력 키우기
  • 데일리 퀴즈
  • 포트폴리오 작성
  • 독스에 친숙해지기
  • MDN 보는 연습하기

오늘의 수업 👍



📝 정규화와 정규형


▷ 정규화

  • 데이터를 중복 저장하지않기 위해 분리하는 것입니다.

  • 어떻게 하면 효율적으로 분리할 것인가 생각해 봐야합니다.

▷ 정규형 ( Normal Form )

  • 정규화가 된 결과를 정규형 이라고 합니다.

  • 정규형의 종류에는 여러가지가 있지만, 실무에서는 제 3 정규형까지만 사용한다.

  • 단계적으로 진행되야한다는 특징이 있다.

📝 정규형의 종류


▷ 비정규화

주문번호날짜이름나이주문 상품
P00110/23철수13A001 레고 1개, A002 미니카 2개
P00208/13영희15A003 인형 1개, A001 레고 2개
P00309/07훈이12A003 인형 2개, A002 미니카 1개
  • 데이터를 수정하고 삭제할 때 문제가 생길 수 있습니다.

  • 데이터를 찾아갈 때 불필요한 단계를 너무 많이 거치게 됩니다(비효율적)

▷ 제 1 정규화 (1NF)

  • 엑셀 하나의 칸에는 하나의 값만 들어가도록 분리해 줍니다.

  • 비정규화였던 표를 제 1 정규화의 룰대로 바꾸면

주문번호날짜이름나이상품번호상품명상품수량
P00110/23철수13A001레고1개
P00110/23철수13A002미니카2개
P00208/13영희15A003인형1개
P00208/13영희15A001레고2개
P00309/07훈이12A003인형2개
P00309/07훈이12A002미니카1개
  • 이런 상황에서는 만약 철수의 이름이 변경되었다고 하면, 2줄 모두 수정해 줘야 합니다.

  • 한 줄 한 줄 모두 수정해야 하는 일이 발생하게 됨으로 비효율적입니다.

  • 아래와 같이 테이블을 두개로 나누면 이를 개선할 수 있습니다.

[ 주문 ] 테이블

주문번호날짜이름나이
P00110/23철수13
P00208/13영희15
P00309/07훈이12

[ 주문_상품 ] 테이블

주문번호상품번호상품명상품수량
P001A001레고1개
P001A002미니카2개
P002A003인형1개
P002A001레고2개
P003A003인형2개
P003A002미니카1개

▷ 제 2 정규화(2NF)

Primary Key(기본키) 와 Composite Key(복합키)

Primary Key : 한 줄의 데이터를 구분할 수 있는 유일한 키
Composite Key : 데이터를 대표하는 키가 여러 개의 컬럼으로 구성된 것

  • 주문 테이블은 날짜를 안다고 주문 번호를 알거나 이름을 알 수는 없습니다.

  • 주문_상품 테이블 은 주문번호나 상품번호 한가지만 알아서는 어떤 상품을 주문했는지 알 수 없습니다.

  • 주문번호와 상품번호 둘 다 알아야 합니다. 이를 복합키라고 합니다.

  • 주문_상품 테이블 의 경우처럼 복합키로 구성되어 있을 때, 나머지 칼럼은 이 두 가지 모두에 종속되어야 합니다.

  • 상품명은 복합키 중 일부에만 종속적입니다. 이런 컬럼을 분리시키는 것이 제 2 정규화 입니다.

[ 상품 ] 테이블

상품번호상품명
A001레고
A002미니카
A003인형
  • 상품 테이블 로 분리됨에 따라 ‘ 레고 ‘ 상품명이 변경된다고 할지라도 1개의 컬럼값만 변경해 주면 됩니다.

▷ 제 3 정규화(3NF)

  • A → B → C의 관계를 가지고 있을때, A와 B, B와 C를 묶어 다른 테이블로 분리하는 것이 제 3 정규화 입니다.

[ 주문 ] 테이블

주문번호날짜고객번호
P00110/23U001
P00208/13U002
P00309/07U003

[ 고객 ] 테이블

고객번호이름나이
U001철수13
U002영희15
U003훈이12

📝 상품 데이터 정규화


상품ID상품명상품내용상품가격상품판매여부카테고리상품태그상품판매자이름상품판매자이메일상품거래주소상품거래상세주소상품거래위도상품거래경도상품거래
P001마우스좋은 마우스1000FALSE가전전자제품, 영등포마우스철수chulsoo@naver.com영등포영등포역10.2430.110시
P002키보드잘쳐지는 키보드1500FALSE가전굿키보드, 전자제품영희hee@gmail.com잠실잠실역10.4430.215시
P003데이터베이스데이터베이스책2000FALSE도서훈이hun@naver.com신도림신도림역10.3330.667시
P004운영체제핵심운영체제3000FALSE도서책사랑맹구mang@naver.com구로구로역10.3730.993시

위의 표를 제 3 정규화까지 거치면 아래의 표와 같습니다.

[ 상품 ] 테이블

상품ID상품명상품내용상품가격상품판매여부상품카테고리ID상품판매자ID상품거래위치ID
P001마우스좋은 마우스1000FALSEC001U001L001
P002키보드잘쳐지는 키보드1500FALSEC001U002L002
P003데이터베이스데이터베이스책2000FALSEC002U003L003
P004운영체제핵심운영체제3000FALSEC002U004L004

[상품 거래 위치] 테이블

상품거래위치ID상품거래주소상품거래상세주소상품거래위도상품거래경도상품거래예정시각
L001영등포영등포역10.2430.110시
L002잠실잠실역10.4430.215시
L003신도림신도림역10.3330.667시
L004구로구로역10.3730.993시

[ 카테고리 ] 테이블

상품카테고리ID카테고리
C001가전
C002도서

[상품 판매자] 테이블

상품판매자ID상품판매자이름상품판매자이메일
U001철수chulsoo@naver.com
U002영희hee@gmail.com
U003훈이hun@naver.com
U004맹구mang@naver.com

[상품 태그] 테이블

상품 태그ID상품 태그
T001전자제품
T002영등포마우스
T003굿키보드
T004
T005책사랑

[ 상품_상품태그 ] 테이블

상품ID상품 태그ID
P001T001
P001T002
P002T003
P002T001
P003T004
P004T005

[상품 거래 위치] 테이블

상품거래위치ID상품거래주소상품거래상세주소상품거래위도상품거래경도상품거래예정시각
L001영등포영등포역10.2430.110시
L002잠실잠실역10.4430.215시
L003신도림신도림역10.3330.667시
L004구로구로역10.3730.993시

[ 카테고리 ] 테이블

상품카테고리ID카테고리
C001가전
C002도서

[상품 판매자] 테이블

상품판매자ID상품판매자이름상품판매자이메일
U001철수chulsoo@naver.com
U002영희hee@gmail.com
U003훈이hun@naver.com
U004맹구mang@naver.com

[상품 태그] 테이블

상품 태그ID상품 태그
T001전자제품
T002영등포마우스
T003굿키보드
T004
T005책사랑

[ 상품_상품태그 ] 테이블

상품ID상품 태그ID
P001T001
P001T002
P002T003
P002T001
P003T004
P004T005

  • N : N 관계는 1 : N, N : 1 관계로 풀려야한다.

  • PK(주키), FK(외례키)

  • CHAR() - 문자

  • VARCHAR() - ()자 안에서 유동적으로 바뀜

오늘의 마무리 👍



  • 복습
  • github 공부
  • 블로그 포스팅
  • 데일리 퀴즈
  • 알고리즘 문제 풀기

항상 겸손한 자세로 배우면서 성장하자, 할 수 있다!! 💪


출처 : 코드캠프

profile
개발자 블로그 / 항상 겸손한 자세로 배우면서 성장하자 할 수 있다!

0개의 댓글