먼저, 가장 널리 사용되는 데이터베이스 종류인 RDBMS(관계형 데이터베이스)에 대해 알아보고, 이어서 데이터베이스의 무결성 제약조건까지 알아보도록 하겠습니다.
RDBMS는 테이블의 구성과 테이블의 관계가 핵심이기에, 크게 두 분류로 나누어 살펴보겠습니다.
1. 테이블의 구성: 필드와 레코드

- 필드 타입: 각 필드로 사용 가능한 데이터 유형/형식
- 키 : 테이블 내, 특정 레코드를 식별할 수 있는 필드의 집합
필드 타입
- 필드 타입은 DBMS 별로 저장 가능한 종류의 차이가 있음
- MySQL 기준, 저장 가능한 필드 타입의 종류
- 숫자형
- 정수
- TINYINT
- 1바이트의 정수
- SMALLINT
- 2바이트의 정수
- MEDIUMINT
- 3바이트의 정수
- INT
- 4바이트의 정수
- BIGINT
- 8바이트의 정수
- TINYINT
- 실수
- FLOAT
- 4바이트의 부동 소수점 실수
- DOUBLE
- 8바이트의 부동 소수점 실수
- DECIMAL
- DECIMAL 형식(전체 자릿수, 소수점 자리수)의 고정 소수점 실수
- FLOAT
- 정수
- 문자형
- CHAR
- 고정 길이 문자열
- VARCHAR
- 가변 길이의 문자열
- BLOB
- 이미지, 파일과 같은 대량 바이너리 데이터
- TEXT
- 대량 가변 길이의 문자열
- CHAR
- 날짜 / 시간형
- DATE
- 날짜(형식: YYYY-MM-DD)
- TIME
- 시간(형식: HH:MM:SS)
- DATETIME
- 8바이트의 날짜 및 시간(형식: YYYY-MM-DD HH:MM:SS)
- TIMESTAMP
- 4바이트의 날짜 및 시간(형식: YYYY-MM-DD HH:MM:SS)
- DATE
- 기타
- ENUM
- 정해진 값 중 하나(성별 등)
- GEOMETRY
- 지리 정보(좌표 데이터 등)
- XML
- XML 데이터
- JSON
- JSON 데이터
- JSON 데이터
- ENUM
- 숫자형
키
- 테이블의 레코드를 식별할 수 있는 필드(1개 이상)
- 이외 다양한 용도
- 테이블 간 참조
- 테이블 접근 속도 향상
- 다양한 용도 만큼, 다양하게 사용되는 키의 종류
- 후보 키(Candidate Key)
- 테이블의 한 레코드를 식별하기 위한 필드의 최소 집합
- 특정 레코드를 유일하게 식별하는 키 → “유일성을 갖추었다.”
- 하나 이상의 필드로 구성 가능
- 후보 키에 포함된 필드 중 하나라도 생략한다면, 레코드의 고유 식별이 불가능해짐
- 불필요한 필드 포함 없이, 최소한의 정보로 레코드를 식별 → “최소성을 갖추었다.” ⇒ 유일성과 최소성을 모두 만족하는 키
- ex) 아래와 같은 학생 테이블에서
- ‘학번’, ‘이메일’, ‘전화번호’와 같은 각각의 필드를 후보 키로 간주할 수 있음

- ‘학번’, ‘이메일’, ‘전화번호’와 같은 각각의 필드를 후보 키로 간주할 수 있음
- 테이블의 한 레코드를 식별하기 위한 필드의 최소 집합
- 기본 키(Primary Key)
- 하나의 레코드를 식별하도록 선정되어, 테이블 당 하나만 존재할 수 있는 키
- 테이블의 레코드를 대표할 수 있도록 선택된 키 → 유일성 및 최소성 만족 + 여러 필드로 구성된 기본키도 가능
- 하나의 레코드를 식별하도록 선정되어, 테이블 당 하나만 존재할 수 있는 키
- 외래 키(Foreign Key)
- 다른 테이블의 기본 키를 참조하는 필드
- 테이블 간 참조 관계 형성에 사용
- ex) 아래와 같은 ‘학생 테이블’ 및 ‘과목 테이블’에서,
- ‘학생 테이블’의 ‘수강과목’ 필드는 과목 테이블의 ‘개설과목’ 필드를 참조하는 외래 키로 활용
- 외래 키를 통해, 다른 테이블에 연결(참조)이 가능하고, 테이블 간 관계도 표현 가능해짐

- ex) 아래와 같은 ‘학생 테이블’ 및 ‘과목 테이블’에서,
- 테이블 간 참조 관계 형성에 사용
- 다른 테이블의 기본 키를 참조하는 필드
- 복합 키(Composite Key)
- 두 필드 이상으로 구성된 후보 키
- ex)성적 테이블
- ‘학번’, ‘과목코드’와 같이 최소 두 개의 필드가 있어야 고유 레코드를 식별할 수 있음.

- ‘학번’, ‘과목코드’와 같이 최소 두 개의 필드가 있어야 고유 레코드를 식별할 수 있음.
- 슈퍼 키(Super Key)
- 레코드를 식별하기 위한 ‘필드의 집합’
- 최소 갯수의 필드 집합은 아님 → 유일성만 만족, 최소성은 만족하지 않음
- 레코드를 식별하기 위한 ‘필드의 집합’
- 대체 키(Alternate key)
- 기본 키가 아닌 후보 키
- 기본 키 선정 이후에, 남는 키들은 곧 대체 키가 됨
- 기본 키 선정 이후에, 남는 키들은 곧 대체 키가 됨
- 기본 키가 아닌 후보 키
- 후보 키(Candidate Key)
2. 테이블의 관계
- 외래 키를 매개로 한 테이블 간 연관관계
- 일대일 대응, 일대다 대응, 다대다 대응
일대일 대응 관계
- 하나의 레코드가 다른 테이블의 레코드 하나에만 대응되는 경우
- ex) 여권 테이블 및 승객 테이블
- 여권 테이블은 ‘고객 번호’라는 필드를 외래 키로 삼아 승객 테이블 참조 → 두 테이블은 일대일 대응 관계
- 여권 테이블에 속한 엔티티 하나는 승객 테이블에 속한 엔티티 하나에 대응

- ex) 여권 테이블 및 승객 테이블
일대다 대응관계
- 하나의 레코드가 다른 테이블의 여러 레코드와 대응될 수 있는 경우
- ex) 연관된 2개의 테이블, 주문 테이블과 고객 테이블
- 고객 한명은 주문을 여러 건 수행할 수 있음 → 두 테이블은 일대다 대응 관계
- 고객 테이블에 속한 엔티티 하나는, 주문 테이블에 속한 여러 개의 엔티티에 대응될 수 있음

- ex) 연관된 2개의 테이블, 주문 테이블과 고객 테이블
다대다 대응관계
- 한 테이블의 여러 레코드가, 다른 테이블의 여러 레코드와 대응되는 경우
- 일반적으로, 다대다 테이블 관계는 중간 테이블을 수반함
- 다대다 대응관계는 중간 테이블에 대한 일대다 대응관계가 두 번 이루어진 것과 동일
- ex) 사용자 테이블, 그룹 테이블, 이를 아우르는 사용자 그룹 테이블
- 사용자 테이블과 그룹 테이블의 다대다 관계를 표현하기 위해 ‘사용자그룹 테이블’ 활용
- 사용자 테이블 - 사용자그룹 테이블 : ‘사용자 ID’ 필드를 매개로 일대다 관계 형성
- 그룹 테이블 - 사용자그룹 테이블 : ‘그룹 ID’ 필드를 매개로 일대다 관계 형성

- 사용자 테이블과 그룹 테이블의 다대다 관계를 표현하기 위해 ‘사용자그룹 테이블’ 활용
- ex) 사용자 테이블, 그룹 테이블, 이를 아우르는 사용자 그룹 테이블
3. 무결성 제약 조건
무결성
- 무결성 : 일관되며 유효한 데이터 상태
- 무결성 제약 조건 : 데이터베이스에 저장된 데이터의 일관성과 유효성을 유지하기 위해 마땅히 지켜야 할 조건
- 오류 ex) : “무결성 제약 조건을 지키지 않을 경우”

- 오류 ex) : “무결성 제약 조건을 지키지 않을 경우”
대표적인 무결성 제약조건
- 각 제약조건이 발생하는 상황이 Point
- 도메인 제약 조건(Domain constraint)
- 테이블이 가질 수 있는 필드 타입과 범위에 대한 규칙
- 각각 필드의 데이터는
- 원자 값을 가짐
- 지정된 타입을 준수
- 값의 범위나 기본값이 지정된 경우 준수
- NULL이 허용되지 않은 경우, NULL이 저장되면 안됨
- 위와 같은 조건이 명시된 테이블의 경우, 제약조건에 위배하는 데이터 삽입/수정 시 ‘도메인 제약 조건’에 위배된 것으로 간주

- 각각 필드의 데이터는
- 원자 값(Atomic value)
- 더 이상 쪼갤 수 없는 단일한 값
- 테이블 내, 각 필드 데이터인 ‘이름, 나이, 성별’은 각각 더 이상 쪼갤 수 없는 단일한 값임

- 테이블이 가질 수 있는 필드 타입과 범위에 대한 규칙
- 키 제약 조건(Key constraint)
- 레코드를 고유하게 식별 가능한 키로 지정된 필드에는 중복된 값이 존재하면 안됨
- 엔티티 무결성 제약 조건(= 기본 키 제약 조건, Entity integrity constraint)
- 기본 키로 지정한 필드 : 고유한 값 / NULL값이면 안됨
- 결국, 기본 키가 갖추어야 할 조건
- 참조 무결성 제약 조건(= 외래 키 제약 조건, Referential integrity constraint)
- 외래 키 → 참조하는 테이블의 기본 키와 같은 값을 갖거나 NULL값을 가져야 함
- 외래 키와 관련된 제약 조건
참조하는 테이블이 삭제/수정되는 경우
- 아래와 같이 참조하는 필드가 삭제 혹은 변경되는 경우, RDBMS는 다음과 같은 4가지 동작이 일어남
- 연산 제한(restrict)
- 주어진 삭제/수정 연산 자체를 거부
- 기본값 설정(set default)
- 참조하는 레코드를 미리 설정된 기본값으로 설정
- NULL값 설정(set null)
- 참조하는 레코드를 NULL로 설정
- 연쇄 변경(cascade)
- 참조하는 레코드를 주어진 삭제/수정 연산에 따라 변경
- 참조하는 레코드를 주어진 삭제/수정 연산에 따라 변경
- 연산 제한(restrict)
이어서 다음 포스트에서는 ER 다이어그램과 이에 관한 정규화 과정에 대해서 알아보도록 하겠습니다.
chat_bubble 댓글남기기
댓글남기기