What I Learn Today

Start Date : 2022/02/07 ~

Learn/Company

[TIL #2] 세 번째 출근, DB 학습 과제

HannaDev 2022. 2. 10. 00:40

세 번째 출근날 ! 오늘은 어느 부분을 중점적으로 학습해야 하는지에 대한 교육을 받았습니다.

 

Back-end 개발자인 만큼 "RDBMS" 의 특성, 특히 MySQL 특성을 파악하는 것을 강조하셨는데요.핵심적으로 4가지를 집중적으로 공부하여 스스로 문서화 해보라는 과제를 수여받았습니다! (*ˊᵕˋ*)ノ

 

  • SQL 정규화 (DB 설계의 관점에서)
  • Index & 제약 조건 (특히 MySQL 만의 제약 조건)
  • 서브 쿼리 (특히 where 절)
  • 트랜잭션 (특히 commit, rollback)

따라서 Notion 에 공부한 내용들을 정리하고, '나만의 언어로 표현하기' 과정을 통해 학습 밀도를 높였습니다.

 

▷ Notion CS 공부 페이지


▶ 전체적인 스케쥴

  1. 사무실 자리 세팅 (물품 세팅) - 0.5h
  2. 개발 스크럼 회의 참관 - 0.5h
  3. 'SQL 레벨업' 책 읽기 (개인 공부) - 0.5h
  4. Back-end OT (SQL 공부 방향 제시) - 2h
  5. 점심 ⇒ 동기 분들과 대화 - 1h

--------------- 여기서부터는 자율 스터디 시간 --------------

  1. Workbench 설치 및 다이어그램 확인 + Trello 에 To do list 기록 - 0.5h
  2. '정규화 공부' - 1.5h
    • 정규화 => DB Key 종류 => DB 모델링 => 함수 종속성 => 무결성 => 정규화 (학습 흐름)
  3. [Slack 에서 잠시 소통] jsisweird (이상한 자바스크립트의 세계) - 0.5h
    • 리드 개발자님 : 비슷한 것들이 파이썬에도 있으니 늘 데이터형이나 비교문 여러 부분에 고민을 많이 해야해요 ㅋㅋ 정말 예상외의 값때문에 당황하는 경우가 많음
  4. '정규화 공부' - 1h
    • 정규화 개념 공부 (여러 개 티스토리 글들 참고) => '나만의 언어로 표현하기' => Notion 기록 완료
  5. 'Index 공부' - 0.5h
    • 학습 포인트 기록 => Index 개념 공부 (티스토리 글 참고) 링크
  6. 'Index 공부' But 집중력 zero - 1h
    • 이상하게 오후 5시부터 6시 사이에는 집중력이 저하된다.
    • 원인 파악 중... (수면 시간이 부족해서 그런가?)

전반적으로 4개 중 1.5개 분량의 진도를 나갔습니다. (약 진도율 38%)

나머지는 다음날에 ! (집가서 Index 는 마저 공부하려 했지만 트래커스 모임이 있어 시간이 부족하네요 ㅠ.ㅠ)


▶ 오늘의 Study TIL => SQL 정규화 링크

 

학습 포인트

  • SQL 정규화가 무엇인지 설명할 수 있다.
  • SQL 정규화의 의미를 설명할 수 있다.
  • SQL 정규화는 DB 설계의 기본기 ⇒ 많이 고민해보는 것이 중요 (논리+센스)

 

★ 나만의 언어로 표현하기

 

 📎 키의 종류 (5가지)

  • 후보키, 기본키, 대체키, 슈퍼키(복합키), 외래키
  • 테이블은 하나의 기본키를 가져야 한다. (식별자) </aside>

 📎 함수적 종속

  • 속성이 다른 속성 변화에 영향을 받는 경우, 종속되었다고 표현한다. </aside>

 

 💡 정규화

  • DBMS 는 데이터를 조작할 수 있는 기능을 제공한다.
  • 이 때, DBMS 의 중요한 기능 중 하나가 **‘데이터 무결성'**을 유지하는 것이다.
    • 데이터 무결성이란 데이터의 정확성, 일관성, 유효성이 유지되는 것.
  • DBMS 는 데이터 무결성을 유지하며 데이터를 조작하는 것이 매우 중요합니다. 이러한 관점에서 정규화 과정을 거치면 데이터 중복으로 인한 이상이 발생하지 않도록 구조화할 수 있습니다.
  • 정규화를 이용해 DB 설계를 검증한다.
  • 정규화는 중복을 최소화하도록 데이터를 구조화하는 작업이다.
  • 정규화를 거치면 중복 데이터를 줄임으로서 데이터 무결성을 보장해주는 효율적인 데이터베이스 구조를 만들어 나갈 수 있다.
    • 불필요한 데이터 제거
    • 논리적인 데이터 저장 (=테이블 구성이 논리적으로 직관적)
  • 기본적으로 3가지 정규화 과정이 있다. </aside>

 

 ✅ 정규화 1 : 기본키를 가져야 한다.

  • 같은 타입의 여러 개 키 X
  • 하나의 컬럼에 여러 개 데이터 X </aside>

 ✅ 정규화 2 : 부분적 함수 종속 없애기

  • 기본키를 복합키로 설정하지 않기
  • _id → synthetic key 를 기본키로 설정 ! (가장 간단한 방법) </aside>

 ✅ 정규화 3 : 이행적 함수 종속 없애기

  • 기본키 이외의 다른 컬럼이 그 외 다른 컬럼을 결정할 수 없도록 하는 것.
    • 여러 명의 학생들이 같은 Zip 코드를 갖는 경우 Zip 코드만 알면 3가지 소성을 결정할 수 있다.
    • 이 경우 중복된 데이터가 생길 가능성이 매우 크다.
  • 테이블 분리하기! </aside>

 


▶ 오늘의 Study TIL => Index 학습 목표 링크

 

학습 포인트

  • Index가 무엇인지 설명할 수 있다.
  • Index를 왜 사용해야 하는지 설명할 수 있다.
  • Index 의 기본적인 규약 조건MySQL 특징 규약 조건을 설명할 수 있다.
  • Index 의 단점을 설명할 수 있다.
    • (A, B, C) 인덱스를 만들었을 때, A에만 조건을 걸면 인덱스가 작동하는가?
    • Text 는 인덱스가 가능한가?
    • like 검색에 인덱스를 사용할 수 있는가?
    • 인덱스는 무조건 사용하는 것이 좋은가?
      • 힌트 : Insert 가 많은 곳에 인덱스를 사용하면 좋지 않다. (카탈로그 - 테이블 or 인덱스 통계 정보 저장 ⇒ 이를 통해 인덱스 검색을 하는데...)

 

<대표 이미지용>