02. 물리 데이터 저장소 설계
📌 물리 데이터 모델링 변환 절차
-
개체를 테이블로 변환
-
속성을 컬럼으로 변환
-
UID를 기본키로 변환
-
관계를 외래키로 변환
-
컬럼 유형과 길이 정의
- CHAR : 최대 2000바이트 고정길이 문자열
- VARCHAR : 최대 4000바이트 가변길이 문자열
- NUMBER : 38 자릿수의 숫자 저장
- DATE : 날짜 값
- BLOB, CLOB : 바이너리, 텍스트 데이터 최대 4GB까지
-
반정규화 수행
📌 물리 데이터 저장소 구성
✅ 테이블 제약조건 설계
- 참조무결성 제약조건 : 참조의 일관성 보장
- 제한(Restricted) : 참조무결성 원칙을 위배하는 연산 거절
- 연쇄(Cascade) : 참조되는 릴레이션에서 튜플 삭제하고 참조되는 릴레이션에서 이 튜플을 참조하는 튜플들도 함께 삭제하는 옵션
- 널 값(Nullify) : 참조되는 릴레이션에서 튜플을 삭제하고 참조하는 릴레이션에서 튜플들의 외래키에 NULL값 넣는 옵션
※ 애트리뷰트에 'NOT NULL'이라고 명시되어 있다면 삭제 연산 거절
ALTER TABLE 테이블 ADD
FOREIGN KEY (외래키)
REFERENCES 참조테이블(기본키)
ON DELETE [RESTRICT | CASCADE | SET NULL ]
✅ 인덱스 설계
- 개념 : 검색 연산의 최적화를 위해 DB 내 열에 대한 정보를 구성한 데이터 구조
- 인덱스 컬럼 선정
- 설계시 고려사항
- 지나치게 많은 인덱스는 오버헤드로 작용
- 추가적인 저장공간 필요
- 넓은 범위 인덱스 처리 시 전체 처리보다 많은 오버헤드 초래 가능
- 인덱스와 테이블 저장 공간 적절히 분리
✅ 뷰 설계
- 뷰 속성
- REPLACE : 뷰가 이미 존재하는 경우 재생성
- FORCE : 본 테이블의 존재 여부 관계없이 뷰 생성
- NOFORCE : 기본 테이블이 존재할 때 뷰 생성
- WITH CHECK OPTION : 서브 쿼리 내의 조건을 만족하는 행만 변경
- WITH READ ONLY : 데이터 조작어 작업X
✅ 클러스터 설계
- 적용기준
- 인덱스의 단점 해결한 기법으로, 분포도 넓을수록 유리
- 분포도 넓은 테이블의 경우 저장 공간의 절약 가능
- 대량의 범위를 자주 액세스하는 경우 적용
- 여러 테이블이 빈번하게 조인을 일으킬 때 사용
- 설계시 고려사항
- 검색 효율은 높여주나 입력, 수정, 삭제 시는 부하 증가
- UNION, DISTINCT, ORDER BY, GROUP BY 빈번한 칼럼이면 검토대상
- 수정이 자주 발생하지 않는 칼럼은 검토 대상
- 처리 범위가 넓어 문제가 발생하는 경우 → 단일 테이블 클러스터링
- 조인이 많아 문제가 발생하는 경우 → 다중 테이블 클러스터링
✅ 파티션 설계 (레헤리컴)
- 종류
- 레인지 파티셔닝
- 연속적인 숫자나 날짜를 기준
- e.g. 우편번호, 일별, 월별, 분기별 등
- 해시 파티셔닝
- 해시 함수 값에 의한 파티셔닝
- 균등한 데이터 분할 가능, 질의 성능 향상 가능
- e.g. 범위가 없는 데이터에 적합
- 리스트 파티셔닝
- 특정 파티션에 저장될 데이터에 대한 명시적 제어가 가능
- 분포도 비슷하고 데이터 많은 SQL에서 컬럼의 조건이 많이 들어오는 경우 유용
- e.g. (한국,일본,중국 -> 아시아)(호주,뉴질랜드 -> 오세아니아)
- 컴포지트 파티셔닝
- 3개의 파티셔닝 중 2개 이상의 파티셔닝 결합
- e.g. 레인지 파티셔닝할 수 있는 컬럼이나 파티션이 너무 커서 효과적으로 관리할 수 없을 때 유용
- 장점 (성가백합)