ERD (Entity Relationship Diagram)
: 릴레이션의 관계를 정의한 것으로, DB 구축의 기초적인 뼈대이다.
ERD는 시스템 요구 사항을 기반으로 작성되며, 디버깅과 비지니스 프로세스 재설계가 필요한 경우에 설계도 역할을 담당하기도 한다.
비정형 데이터
: 비구조화 데이터로, 미리 정의된 데이터 모델이나 정의되지 않은 정보들
데이터베이스 이상 현상
: 테이블을 설계할 때 잘못 설계하여 데이터를 삽입, 삭제, 수정할 때 논리적으로 생기는 오류
정규화 과정
: 정규형 원칙을 기반으로 정규형을 만들어가는 과정
이번 시간에는 기본 정규형인 [1,2,3] 정규형, 보이스 / 코드 정규형을 공부한다.
그러나 정규형 과정을 거쳐 테이블을 나눈다고 하더라도, 성능이 항상 좋아지는 건 아니다.
테이블을 나누면 특정 쿼리는 Join을 해야하는 경우가 발생해 오히려 느려질 수도 있다.
모든 도메인이 더 이상 분해될 수 없는 원자 값(atomic value)만으로 구성되어야 한다.
한개의 기본키에 대해 두 개 이상의 값을 가지는 반복집합은 없어야한다.
릴레이션이 제1 정규형이며, 부분 함수의 종속성을 제거한 형태
부분함수의 종속성 제거
: 기본키가 아닌 모든 속성이 기본키에 완전 함수 종속적인 것
주의할 점
- 릴레이션을 분해할 때 동등한 릴레이션으로 분리해야한다.
- 정보 손실이 일어나지 않는 무손실 분해로 분리되어야 한다.
제2 정규형이며, 기본키가 아닌 모든 속성이 이행적 함수 종속(transivite FD)을 만족하지 않는 상태
이행적 함수 종속
: A → B와 B → C가 존재하면, 논리적으로 A → C가 성립하는데 이때 집합 C가 집합 A에 이행적으로 함수 종속이 되었다고 한다.
제3 정규형이며, 함수 종속 관계에서 모든 결정자가 후보키인 상태
결정자
: ‘X’ → ‘Y’일때 X는 결정자, Y는 종속자데이터베이스에서 하나의 논리적 기능을 수행하기 위한 작업의 단위이며, 이에 대한 특징으로 원자성 일관성 독립성 지속성이 있고 이를 ACID 특징이라고 한다.
“all or nothing”
트랜잭션과 관련된 일이 모두 수행되었거나 되지 않았거나를 보장하는 특징이다.
예를 들어 트랜잭션을 커밋했는데, 문제가 발생하여 롤백하는 경우 그 이후에 모두 수행되지 않음을 보장하는 것
트랜잭션 단위로 여러 로직들을 묶을 때 외부 API를 호출하면 안된다.
만약 존재한다면, 롤백 발생 시 해결방안이 있어여 하며 트랙잭션 전파를 신경써서 관리해야한다.
여러 쿼리가 성공적으로 처리되었다고 확정하는 명령어
트랜잭션으로 처리한 하나의 묶음 과정을 일어나기 전으로 돌리는 일(취소)을 말한다.
이러한 커밋과 롤백 덕분에 데이터의 무결성이 보장된다.
또한 데이터 변경 전에 변경 사항을 쉽게 확인할 수 있으며 해당 작업을 그룹화할 수 있다.
트랜잭션 관련 메서드의 호출을, 하나의 트랜잭션에 묶이도록 하는 것.
@Service
@Transactional(readOnly = true)
public class MemberService{
private final Member Repository memberRepository;
public MemberService(MemberRepository memberRepository){
this.memberRepository = memberRepository;
}
}
이처럼 Spring에선 Transcational 애너테이션을 통해 여러 쿼리 코드들을 하나의 트랜잭션으로 처리한다.
허용된 방식으로만 데이터를 변경해야 하는 것
트랜잭션 수행 시 서로 끼어들지 못하는 것
성공적으로 수행된 트랜잭션은 영원히 반영되어야 하는 것
체크섬
: 중복 검사의 한 형태로, 오류 정정을 통해 무결성을 보호하는 방법
저널링
: 변경 사항을 반영(commit)하기 전에 로깅하는 것, 트랜잭션 등 변경 사항에 대한 로그를 남기는 것
데이터의 정확성, 일관성, 유효성을 유지하는 것
이름 | 설명 |
---|---|
개체 무결성 | 기본키로 선택된 필드는 빈 값을 허용하지 않음 |
참조 무결성 | 서로 참조 관계의 두 테이블의 데이터는 항상 일관된 값 유지 |
고유 무결성 | 고유한 값을 가지는 조건의 속성의 경우 그 속성 값은 모두 고유한 값을 가짐 |
NULL 무결성 | NULL이 올 수 없다는 조건의 속성의 경우 그 속성 값은 모두 NULL이 아님 |