세 번째 출근날 ! 오늘은 어느 부분을 중점적으로 학습해야 하는지에 대한 교육을 받았습니다.
Back-end 개발자인 만큼 "RDBMS" 의 특성, 특히 MySQL 특성을 파악하는 것을 강조하셨는데요.핵심적으로 4가지를 집중적으로 공부하여 스스로 문서화 해보라는 과제를 수여받았습니다! (*ˊᵕˋ*)ノ
- SQL 정규화 (DB 설계의 관점에서)
- Index & 제약 조건 (특히 MySQL 만의 제약 조건)
- 서브 쿼리 (특히 where 절)
- 트랜잭션 (특히 commit, rollback)
따라서 Notion 에 공부한 내용들을 정리하고, '나만의 언어로 표현하기' 과정을 통해 학습 밀도를 높였습니다.
▶ 전체적인 스케쥴
- 사무실 자리 세팅 (물품 세팅) - 0.5h
- 개발 스크럼 회의 참관 - 0.5h
- 'SQL 레벨업' 책 읽기 (개인 공부) - 0.5h
- Back-end OT (SQL 공부 방향 제시) - 2h
- 점심 ⇒ 동기 분들과 대화 - 1h
--------------- 여기서부터는 자율 스터디 시간 --------------
- Workbench 설치 및 다이어그램 확인 + Trello 에 To do list 기록 - 0.5h
- '정규화 공부' - 1.5h
- 정규화 => DB Key 종류 => DB 모델링 => 함수 종속성 => 무결성 => 정규화 (학습 흐름)
- [Slack 에서 잠시 소통] jsisweird (이상한 자바스크립트의 세계) - 0.5h
- 리드 개발자님 : 비슷한 것들이 파이썬에도 있으니 늘 데이터형이나 비교문 여러 부분에 고민을 많이 해야해요 ㅋㅋ 정말 예상외의 값때문에 당황하는 경우가 많음
- '정규화 공부' - 1h
- 정규화 개념 공부 (여러 개 티스토리 글들 참고) => '나만의 언어로 표현하기' => Notion 기록 완료
- 'Index 공부' - 0.5h
- 학습 포인트 기록 => Index 개념 공부 (티스토리 글 참고) 링크
- '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 인덱스 통계 정보 저장 ⇒ 이를 통해 인덱스 검색을 하는데...)
'Learn > Company' 카테고리의 다른 글
[TIL #5] Front-end 신입 분 오신 날! (0) | 2022.02.14 |
---|---|
[TIL #3] 네 번째 출근날, 인프라 OT 및 기능 테스트 (0) | 2022.02.12 |
[TIL #4] 첫 주 마지막 출근, Docker 과제 (0) | 2022.02.12 |
[TIL #1] 출근 2일차, Back-end OT (0) | 2022.02.09 |
[TIL #0] 첫 출근, 스크럼 회의 (0) | 2022.02.08 |