티스토리 뷰
728x90
반응형
물리적 모델링: 실제 만들 DB에 가장 가깝게 데이터 모델을 만드는 과정
네이밍: 어떤 규칙을 정하는 것 보다 정해진 규칙을 따르는 것이 중요
- 단수/복수 정하기
- 대문자/띄어쓰기 정하기
- 줄임말 정하기
데이터 타입: 각 컬럼이 어떤 데이터를 저장하는지에 대한 내용 | DB의 가장 기본적인 제약사항
- 숫자형 타입
- 정수형타입: TINYINT(-128~127) | SMALLINT(-32768~32767) | MEDIUMINT(-8388608~8388607) | INT( -2147483648 ~ 2147483647) | BIGINT(-9223372036854775808 ~ 9223372036854775807)
- 실수형타입: DECIMAL(M, D) | FLOAT | DOUBLE
- 날짜 및 시간 타입
- DATE: YYYY-MM-DD
- DATETIME: YYYY-MM-DD HH:MM:SS
- TIMESTAMP: YYYY-MM-DD HH:MM:SS | 타임존 정보도 함께 저장함
- TIME : 시간을 나타냄 | HH:MM:SS
- 문자열 타입: CHAR | VARCHAR | TEXT
제약조건: 특정 컬럼이 항상 만족해야 되는 조건
선형 vs 이진 탐색
- 선형 탐색(Linear Search): 순차적으로 탐색하는 것 | O(n)
- 이진 탐색(Binary Search): 특정 순서대로 정렬되어 있을 때 1/2를 해서 탐색하는 것 | O(log(n))
인덱스: 특정 컬럼 값들을 정렬해서 저장해 놓은 것
- 단점: 용량을 잡아먹음(Non-Clustered) | 인덱스 업데이트 문제
- 인덱스를 추가하려는 테이블의 컬럼들이 얼마나 자주 삽입, 업뎃, 삭제 되는지 파악 | 연산들을 많은 테이블의 컬럼엔 인덱스가 오히려 역효과를 낳음
- 기본원칙) 모든 Primary key에 대해서 인덱스를 만들어준다 | 모든 foreign key에 대해서 인덱스를 만들어준다 | 특정 조회 쿼리가 너무 느려지거나 느려질게 확실한 경우, 조회에 사용되는 컬럼들에 대해서 인덱스를 만들어준다
Clustered vs Non-Clustered 인덱스
- Clustered 인덱스) 테이블 자체를 특정 순서로 저장하는 인덱스 | 조회속도가 빠름 | 하나 밖에 못 만듦
- Non-Clustered 인덱스) 테이블 자체는 그대로 놔두고 다른 곳에 순서 저장 | 인덱스를 모든 컬럼에 대해 만들 수 있음 | 클러스티드보단 좀 느림
728x90
반응형
'JavaScript > JS백엔드' 카테고리의 다른 글
[Express] 라우터 (1) | 2025.01.14 |
---|---|
[Express] 미들웨어 (0) | 2025.01.13 |
정규화 (0) | 2025.01.02 |
논리적 모델링 (4) | 2025.01.02 |
데이터 모델링 (0) | 2025.01.02 |