Relation
- DB에서 데이터를 구분하여 저장하는 기본 단위
- 관계형 DB에선 테이블, NoSQL에선 컬렉션이라 부르기도 한다
ERD
- Entity Relationship Diagram, Relation 간의 관계들, 테이블 관계를 구조화한 것
- 보통 ERD는 요구 사항을 토대로 작성되어 DB를 구축하는데, 구축 이후에도 비즈니스 재설계가 필요할 때 설계도 역할을 하기도 한다
정규화
- Relation 간의 잘못된 관계로 인해 데이터가 꼬였을 때, 불필요한 컬럼이 있을때, 효율적으로 사용하기 위한 정리 과정
- 정규화 과정의 목적은 좀 더 좋은 구조로 만들기 위해, 자료 중복은 감소하고, 독립적인 관계는 별도의 Relation으로 표현할 수 있게 다듬어 가는 것이다, 이에 대한 원칙들이 따로 정리되어 있기도 하다
- 제1정규형 : 한 Relation은 더 이상 도메인 데이터를 분리할 수 없는 값들로 구성이 되어야 한다
- 기본 PK에 두개 이상의 컬럼이 나와선 안된다는 뜻
- 제2정규형 : 제1정규형이면서, 부분 종속성을 제거해야 한다
- 유저ID, 유저명, 수강명, 수강성취도 이런 컬럼이 있는 테이블이 있다 가정할 때
- 유저와 수강 사이에 종속성이 생길 수 있으므로, 유저는 유저별로, 수강쪽은 별도 테이블로 만들어 종속성을 제거할 수 있다
- 제3정규형 : 제2정규형이고, 이행 함수 종속을 만족하지 않아야 한다
- A → B이고, B → C이면, A → C가 가능한게 이행 함수 종속인데, 정규화는 이를 만족하지 않아야 한다
- 유저명, 등급, 할인율 이런 컬럼이 하나의 테이블에 있다 가정할 때
- 유저명, 등급 테이블과 등급, 할인율 테이블로 분리하여 이행 함수 종속을 제거해야 한다는 것
- 그 외 다른 정규형 규칙도 있지만, 무조건 정규화를 한다고 해서 성능이 좋아지진 않는다, 요구사항에 따라선 테이블 조인을 해야 하는데 이런것이 오히려 성능을 저하시킬 수 있기 때문
Index
Index
Transaction
- 하나의 기능을 수행하기 위한 DB 작업 단위, 여러개의 쿼리를 하나로 묶는 단위
- 트랜잭션의 특징이 4개가 있는데, 이를 통틀어 ACID 특징이라 한다
- Atomicity, 원자성 - 트랜잭션 관련 쿼리가 모두 수행되었거나 되지 않았거나를 보장한다
- Consistency, 일관성 - 트랜잭션 수행 후엔 일관적인 데이터를 유지해야 한다
- Isolation, 격리성 - 서로 다른 트랜잭션끼리 간섭하지 못한다
- Durability, 지속성 - 완료된 트랜잭션은 영원히 보장된다
- 위 특징 중 격리성에 대한 수준, 레벨이 나뉘어지는데 아래와 같다
- SERIALIZABLE : 트랜잭션을 순차적으로 진행한다, 동시에 같은 행을 접근할 수 없어 성능이 많이 떨어진다
- REPEATABLE_READ : 하나의 트랜잭션이 수정하는 데이터를 다른 트랜잭션을 수정할 순 없지만, 추가는 할 수 있다
- READ_COMMITTED : 커밋 완료된 데이터만 조회한다, 엥간한 DB들의 기본 설정값이기도 하다
- READ_UNCOMMITTED : 한 트랜잭션 커밋 이전에 다른 트랜잭션이 접근할 수 있어, 무결성에 있어선 좋진 않지만, 대량의 데이터를 “어림잡아” 조회할 때 사용하면 좋다
Join