728x90
데이터 무결성
데이터의 무결성이란 무엇일까??
필자가 이해한 바로는 데이터 무결성이란 업무적 무결성 + 데이터베이스에서의 무결성이다.
- 업무적 무결성이란 애플리케이션 로직 안에서 포함되는 어떠한 제약조건이다.
- DBMS에서의 무결성이란 데이터베이스에 타입, 관계, 속성등을 정의하여 트랜잭션을 유지시켜주는 최소한의 장치이다.
이번 포스팅에서는 DBMS에서의 무결성에대해서 다뤄보도록 하겠다.
만약, DB에서 데이터 무결성을 설계하지 않을 경우에는 어떠한 일들이 일어날까??
- PK를 사용하지 않을 경우 → 테이블에 중복된 데이터 존재
- FK를 사용하지 않을 경우 → 부모와 자식 데이터의 논리적인 관계가 깨질 수 있다.
- 컬럼 제약 조건을 하지 않을 경우 → 기본값, NULL값 등이 비정상적으로 데이터베이스에 존재할 수 있다.
DBMS에서 제공해주는 기능들을 활용하여 데이터 무결성을 지킬 수 있다.
- PK
- 지정된 컬럼들이 유일성이 위배되는 일이 없음을 보장
- PK는 NULL이 될 수 없음
- Unique
- 지정된 컬럼들이 유일성이 위배되는 일이 없음을 보장
- NULL 허용
- 인덱스가 자동으로 걸린다!
- FK
- 테이블간의 논리적 관계가 유지됨을 보장
- FK값은 반드시 참조하는 테이블의 PK 값으로 나타내어야한다.
- FK값은 NULL을 가질 수 있다.
- FK에는 여러 옵션이 있다.
- Cascaded Option : Master 삭제시 레코드와 함께 삭제됨
- Nullified Option : Master 삭제시 해당 값을 Null로 세팅함
- Restricted Option : FK가 존재하면 Master레코드를 삭제할 수 없다.
FK가 NULL일 경우 단점
FK가 NULL이 아닐 경우와 비교하면, 대상 테이블에 외래키가 있는 경우 NULL 허용 없이 처리를 완료할 수 있다.FK가 NULL을 허용하게 되면, 개발자가 실수로 FK에 값을 넣지 않을 수도 있다.
- Data Type
- 데이터 형 제한함으로서 데이터 무결성 유지
PK의 데이터 타입의 경우 상용 프로그램에서는 관행적으로 id 값은 Bigint로 application에서는 Long으로 선택하는 것을 추천한다. - 카카오 테크 캠퍼스 멘토님
VARCHAR vs CHAR
VARCHAR : 가변 길이 문자열 저장하여 공간이 절약되지만, 행의 업데이트가 빈번할 경우 단편화 문제가 발생 가능
CHAR : 고정 길이 문자열 저장
검생 속도 : CHAR >>> VARCHAR
판단 기준
”데이터의 길이가 고정되어 있는 가”를 우선적으로 고려할 것!
- Default
- 특정 컬럼에 대해 명시적으로 값을 입력하지 않았을 경우에 SQL 서버가 자동으로 지정된 값을 넣어줌으로써 데이터의 무결성 유지
CREATE TABLE 테이블이름
(
필드이름 필드타입 DEFAULT 기본값,
...
)
지금까지 데이터 무결성에대한 포스팅이었습니다. 감사합니다!
728x90
'Project Trouble Shooting > [Dotoring] 멘토링 어플리케이션' 카테고리의 다른 글
Fetch Join을 여러번 했더니 MultipleBagFetchException이??? (0) | 2023.08.16 |
---|---|
QueryDSL을 사용해 통계(Count)쿼리의 결과를 사용해서 정렬하기 (0) | 2023.08.15 |
식별자, 비식별자 관계는 뭐고 언제 사용해야하는 걸까?? (0) | 2023.08.04 |
엔티티의 통합과 분리의 기준이 뭐야?? (0) | 2023.08.04 |
읽기 전용 쿼리의 성능 최적화에 대한 고민 (0) | 2023.07.31 |