티스토리 뷰

JavaScript/JS백엔드

물리적 모델링

염두리안 2025. 1. 2. 14:06
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
최근에 올라온 글
최근에 달린 댓글
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Total
Today
Yesterday
반응형