정규화
중복을 최소화하게 데이터를 구조화하는 과정
- 1차 정규화: 테이블의 모든 튜플들을 원자값으로 변환
- 2차 정규화: 기본키가 아닌 모든 속성이 기본 키에 완전 함수 종속
- 3차 정규화: 기본키 이외의 다른 컬럼이 그 외 다른 컬럼을 결정할 수 없는 것
키종류
후보키 - 튜플을 유잉ㄹ하게 식별할 수 있는 속성들의 부분 집합, 유일성과 최소성 만족
기본키 - 후보키 중에서 선택한 Main Key, 동일한 값이 중복될 수 없다.
대체키 - 후보키가 둘 이상일때, 기본키를 제외한 나머지 후보키
슈퍼키 - 속성들의 집합으로 구성 된 키, 유일성 만족, 최소성 불만족
외래키 - 참조되는 릴레이션의 기본키와 대응
트랜잭션
데이터 베이스의 상태를 변화시키는 논리적 작업 단위
Atomicity(원자성) - 트랜잭션의 연산은 모두 반영이 되거나 모두 반영이 되지 않아야 한다
Consistency(일관성) - 트랜잭션 실행 후 일관성 있는 데이터 베이스 상태여야 한다.
Isolation(독립성) - 둘 이상의 트랜잭션이 같이 연산할 수 없다.
Durability(영속성) - 트랜잭션의 결과는 시스템 고장에도 영구적으로 반영되어야 한다.
격리수준
READ UNCOMMITTED - 트랜잭션 실행 여부와 상관없이 값을 읽을 수 있음
READ COMMITED - 커밋이 완료된 값만 읽어옴, 커밋이 완료되지 않은 트랜잭션에선 undo 값을 읽어옴
REAPEATABLE READ - 트랜잭션마다 ID를 부여하고 ID보다 작은 트랜잭션 번호에서 변경한 것만 읽어옴
SERIALIZABLE - 가장 엄격한 격리수준이지만 처리 성능이 낮다
문제점
dirty read - 트랜잭션의 작업이 완료되었음에도 다른 트랜잭션에서 read
non-repeatable read - 하나의 트랜잭션 내에서 같은 데이터 조회시 항상 같은 결과를 가져와야 함
phatom read - 레코드가 추가되거나 삭제되는 현상
인덱스
- 추가적인 쓰기 작업과 저장 공간을 활용하여 데이터베이스 테이블의 검색 속도를 향상시키기 위한 자료구조
- 인덱스를 사용하지 않으면 Full Scan을 통해 전체 탐색을 해야하기 때문에 처리 속도가 떨어진다.
- DELETE, UPDATE 연산 시 기존 인덱스를 삭제하지 않고 사용하지 않음으로 처리하기 때문에
이러한 연산이 계속될 경우 비대해진 인덱스에 의해 성능이 저하된다.
참조
https://3months.tistory.com/193
https://yaboong.github.io/database/2018/03/09/database-normalization-1/
https://nesoy.github.io/articles/2019-05/Database-Transaction-isolation
'CS' 카테고리의 다른 글
[CS] 동기/비동기, 블록/논블록 (1) | 2022.10.26 |
---|---|
신입 개발자 면접 스터디 - OS (0) | 2021.06.07 |
신입 개발자 면접 스터디 - 자바 (0) | 2021.05.31 |