-
데이터베이스 관련 정리Computer Science 2023. 11. 5. 21:45728x90
제 1 정규화 : Table 칼럼이 Atomic Value가 되도록 테이블을 분해
- 각 칼럼이 하나의 속성만 가져야 한다
- 하나의 칼럼은 같은 종류/type의 값을 가져야 한다
- 각 컬럼이 유일한 이름을 가져야 한다
- 칼럼의 순서가 상관이 없어야 한다
제 2 정규화 : 제 1 정규화에 대해 완전 함수 종속
제 3 정규화 : 제 2 정규화를 진행한 테이블에 대해 이행적 종속을 없애도록 테이블을 분해
BCNF 정규화 : 제 3 정규화를 진행한 테이블에 대해 모든 결정자가 후보키가 되도록 테이블을 분해
제 4 정규화 : BCNF 정규화를 진행한 테이블에 대해 다중값 종속이 없도록 분해
- 다중값 종속 : 같은 테이블 내 독립적인 두 개 이상의 칼럼이 또 다른 컬럼에 종속되는 것
제 5 정규화 : 제 4 정규화를 만족한 테이블에 대해 비손실 분해를 더이상 할 수 없게끔 분해
- 조인 종속 : 하나의 릴레이션을 여러 개의 릴레이션으로 분해하였다가, 다시 조인했을 때 데이터 손실이 없고 필요없는 데이터가 생기는 것
*단점
릴레이션의 분해로 인해 릴레이션 간 JOIN 연산이 많아져, 응답 시간이 느려질 수 있다.
OLTP 데이터베이스 : CRUD가 많이 일어나므로 정규화되는 것이 좋다
OLAP 데이터베이스 : 분석과 리포팅을 위해 사용되기 때문에 연산의 속도를 위해 반정규화의 대상이 된다.
반정규화
정규화된 시스템을 성능 향상 및 개발과 운영의 단순화를 위해 역으로 정규화를 수행하는 것. 일반적으로 JOIN을 많이 사용해야 할 경우, 대량의 범위를 자주 처리하는 경우 등 조회에 대한 처리가 중요하다고 판단될 때 부분적으로 반정규화 실행
데이터베이스 분할
- 전체 데이터베이스에 모든 데이터를 한 테이블 혹은 데이터베이스에서 관리하기가 어려움
- 데이터베이스 볼륨이 커지면 커질수록 데이터베이스 읽기/쓰기 성능 감소 -> 데이터베이스 = 병목지점
- Sharding / Partitioning
파티셔닝
- 매우 큰 테이블을 여러 개의 테이블로 분할하는 작업
- 큰 데이터를 여러 테이블로 나누어 저장하기 때문에 쿼리 성능이 개선될 수 있다.
- List Partitioning
- Range Partitioning
- Hash Partitioning
- Composite Partitioning
*단점
테이블간 JOIN에 대한 비용이 증가
테이블과 인덱스를 따로 파티셔닝할 수 없음
데이터를 입력 받았을 때 어디에 넣어야 하는지에 대한 연산 오버헤드 발생 가능
인덱스만으로 해결되는 부분 파티셔닝 적용 시 성능 악화
샤딩
- 동일한 스키마를 가지고 있는 여러 대의 데이터베이스 서버들에 데이터를 작은 단위로 나누어 분산 저장하는 기법
- 작은 단위 = 샤드
샤딩 : 수평 파티셔닝의 일종
파티셔닝은 모든 데이터를 동일한 컴퓨터에 저장하지만, 샤딩은 물리적으로 서로 다른 컴퓨터에 데이터를 분산
- 서로 다른 컴퓨터에 데이터를 저장하므로, 쿼리 성능 향상과 더불어 부하가 분산되는 효과까지 얻을 수 있다.
- 샤딩 = 데이터베이스 차원의 수평 확장
- 샤딩: 데이터베이스 차원이 아닌 애플리케이션 레벨에서 구현하는 것이 일반적
- 플랫폼 차원에서 제공하는 시도가 많음
데이터를 물리적으로 독립된 데이터베이스에 각각 분할하여 저장하므로 여러 샤드에 걸친 데이터를 조인하는 것이 어렵다
한 데이터베이스에 집중적으로 데이터가 몰리면 Hotspot이 되어 성능이 느려진다
- Hash Sharding
- Range Sharding
데이터베이스_공통코드
코드와 코드 값으로 구성된 다양한 코드들을 모아서 하나의 테이블에서 관리하는 것
- 컬럼이 추가될 일이 없어야 한다
- 코드의 이름이 달라야 등록할 수 있게 설
- 서로 다른 여러 업무에서 코드를 모아놓을 것이기 때문에
728x90'Computer Science' 카테고리의 다른 글
SettingWithCopyWarning (1) 2023.11.24 방화벽 (0) 2023.11.05 Git (1) 2023.10.30 Transaction (0) 2023.09.06 [OS] File System에서의 레코드와 필드 (0) 2023.06.22