* 공부 정리일자 (2022년 8월 ~ 12월)
- 책 : 데이터베이스 배움터 (ORACLE을 기반으로 하는), 데이터베이스 개론 (2판), 데이터베이스 시스템 (해외서적 6판)
- 개인적으로 공부 및 복습하면서 정리한 내용입니다. (사진 제외)
* 목차
제2장 관계 데이터 모델과 제약조건
2.1 관계 데이터 모델의 개념
2.1.1 기본적인 용어 (릴레이션)
2.1.2 스키마와 인스턴스
2.2 릴레이션의 특성
2.3 릴레이션의 키
- 수퍼, 후보, 기본, 대체, 외래 키 등
2.4 무결성 제약조건 – 데이터 무결성
2.4.1 도메인 제약조건 (domain constraint)
2.4.2 키 제약조건 (key constraint)
2.4.3 기본 키와 엔티티 무결성 제약조건 (entity integrity constraint)
2.4.4 외래 키와 참조 무결성 제약조건 (referential integrity constraint)
2.4.5 무결성 제약조건의 유지
- 삽입, 삭제, 제한, 연쇄, 널값, 디폴트값, 수정
1. 복습 (중요 키워드 위주)
* 복습 파트 : 2강. 관계 데이터 모델과 제약조건
2.1) 관계 데이터 모델의 개념
(0) 키워드
관계(relation), 투플(tuple), attribute(속성), 카디날리티(cardinality),
차수(degree), 도메인(domain), 원자 값(atomic value), 릴레이션 스키마(schema), 릴레이션 인스탄스(relation instance)
키(key), 수퍼키(super-key), 후보키(candidate key),
기본키/주키(primary key), 대체키(alternate key), 외래키(foreign key)
데이터 무결성(Data integrity), 무결성 제약조건(integrity constraint),
도메인 제약조건(domain constraint), 키 제약조건(key constraint)
개체 무결성(entity integrity constraint), 참조 무결성(referential integrity constraint)
(1) 2장. 관계 데이터 모델과 제약조건
* 관계 데이터 모델
- 동일한 구조(릴레이션)의 관점에서 모든 데이터를 논리적으로 구성
- 선언적인 질의어를 통한 데이터 접근을 제공
- 응용 프로그램들은 데이터베이스 내의 레코드들의 어떠한 순서와도 무관하게 작성됨
- 사용자는 원하는 데이터(what)만 명시하고, 어떻게 이 데이터를 찾을 것인가(how)는 명시할 필요가 없음
- 논리적으로 연관된 데이터를 연결하기 위해서 링크나 포인터를 사용하지 않음
2.1.1) 기본적인 용어
(1) 관계 데이터 모델 – 용어
릴레이션 (relation) : 2차원의 테이블(스프레드 시트와 유사)
레코드 (record) : 릴레이션의 각 행
투플 (tuple) : 레코드를 좀더 공식적으로 부르는 용어
애트리뷰트 (attribute)/속성 : 릴레이션에서 이름을 가진 하나의 열

(2) 도메인 (domain)
- 한 애트리뷰트에 나타날 수 있는 값들의 집합
- 각 애트리뷰트의 도메인의 값들은 원자값 / 프로그래밍 언어의 데이터 타입과 유사함
- 동일한 도메인이 여러 애트리뷰트에서 사용될 수 있음
- 복합 애트리뷰트나 다치 애트리뷰트는 허용되지 않음
* 도메인 정의

(3) 차수, 카디날리티
* 차수 (degree)
- 한 릴레이션에 들어 있는 애트리뷰트들의 수
-- 유효한 릴레이션의 최소 차수는 1 / 릴레이션의 차수는 자주 바뀌지 않음
* 카디날리티 (cardinality)
- 릴레이션의 투플 수
-- 유효한 릴레이션은 카디날리티 0을 가질 수 있음
-- 릴레이션의 카디날리티는 시간이 지남에 따라 계속해서 변함
(4) 널값 (null value)
- ‘알려지지 않음’ 또는 ‘적용할 수 없음’을 나타내기 위해 널값을 사용
- 예: 사원 릴레이션에 새로운 사원에 관한 투플을 입력하는데, 신입 사원의 DNO(부서번호)가 결정되지 않았을 수 있음
- 널값은 숫자 도메인의 0이나 문자열 도메인의 공백 문자 또는 공백 문자열과 다름
- DBMS들마다 널값을 나타내기 위해 서로 다른 기호를 사용함
2.1.2) 스키마와 인스턴스
(5) 릴레이션 스키마 (relation schema)
- 릴레이션의 이름과 릴레이션의 애트리뷰트들의 집합
- 릴레이션을 위한 틀 (framework)
* 표기법
릴레이션이름(애트리뷰트1, 애트리뷰트2, ... 애트리뷰트N)
- 기본 키 애트리뷰트에는 밑줄 표시
- 내포 (intension)라고 함
(6) 릴레이션 인스턴스 (relation instance)
- 릴레이션에 어느 시점에 들어 있는 투플들의 집합
- 시간의 흐름에 따라 계속 변함
- 일반적으로 릴레이션에는 현재의 인스턴스만 저장됨
- 외연 (extension)이라고 함

* 관계 데이터베이스(relational database) 스키마
- 하나 이상의 릴레이션 스키마들로 이루어짐

* 관계 데이터베이스 인스턴스
- 릴레이션 인스턴스들의 모임으로 구성됨

2.2) 릴레이션의 특성
* 릴레이션
- 투플들의 집합
* 릴레이션의 특성
- 각 릴레이션은 오직 하나의 레코드 타입만 포함
- 한 애트리뷰트 내의 값들은 모두 같은 유형
- 애트리뷰트들의 순서는 중요하지 않음

* 릴레이션의 특성 (2)
- 동일한 투플이 두 개 이상 존재하지 않음 -> 키가 존재함
- 한 투플의 각 애트리뷰트는 원자값을 가짐
* 릴레이션의 특성 (3)
- 각 애트리뷰트의 이름은 한 릴레이션 내에서만 고유
- 투플들의 순서는 중요하지 않음
2.3) 릴레이션의 키 (책 78p)
* 요약
관계 데이터베이스의 키 | |
키의 유형 | 정의 |
수퍼 키 (superkey) |
한 릴레이션 내의 특정 투플을 고유하게 식별하는 하나의 애트리뷰트 또는 애트리뷰트들의 집합 유일성을 만족하는 속성 또는 속성들의 집합 |
후보 키 (candidate key) |
각 투플을 고유하게 식별하는 최소한의 애트리뷰트들의 모임 유일성과 최소성을 만족하는 속성 또는 속성들의 집합 |
기본 키 (primary key) |
후보 키가 두 개 이상 있으면 설계자 또는 데이터베이스 관리자가 이들 중에서 하나를 기본 키로 선정 후보 키 중에서 기본적으로 사용하기 위해 선택한 키 |
대리 키 | 인위적으로 추가된 기본 키 |
대체 키 (alternate key) |
기본 키로 선정되지 않은 후보 키 기본 키로 선택되지 못한 후보키 |
외래 키 (foreign key) |
어떤 릴레이션의 기본 키를 참조하는 애트리뷰트 다른 릴레이션의 기본키를 참조하는 속성 또는 속성들의 집합 |
(1) 릴레이션의 키
- 각 투플을 고유하게 식별할 수 있는 하나 이상의 애트리뷰트들의 모임
- 수퍼 키(superkey), 후보 키(candidate key), 기본 키(primary key), 대체 키(alternate key), 외래 키(foreign key)
(2) 수퍼 키 (superkey)
- 한 릴레이션 내의 특정 투플을 고유하게 식별하는 하나의 애트리뷰트 또는 애트리뷰트들의 집합
- 예: 신용카드 회사의 고객 릴레이션에서 (신용카드번호, 주소) 또는 (주민등록번호, 이름) 또는 (주민등록번호)
- 투플들을 고유하게 식별하는데 꼭 필요하지 않은 애트리뷰트들을 포함할 수 있음
(3) 후보 키 (candidate key)
- 각 투플을 고유하게 식별하는 최소한의 애트리뷰트들의 모임
- 예: (신용카드번호, 주소)는 신용카드 회사의 고객 릴레이션의 후보 키가 아니지만 (신용카드번호)는 후보 키
- 모든 릴레이션에는 최소한 한 개 이상의 후보 키가 있음
- 후보 키도 두 개 이상의 애트리뷰트로 이루어질 수 있으며 이런 경우에 복합 키(composite key)라고 부름
- 예: (학번, 과목번호)가 후보 키
(4) 기본 키 (primary key)
- 한 릴레이션에 후보 키가 두 개 이상 있으면 설계자 또는 데이터베이스 관리자가 이들 중에서 하나를 기본 키로 선정함
- 예: 신용카드 회사의 고객 릴레이션에서 신용카드번호와 주민등록번호가 후보 키가 될 수 있음. 이 중에서 신용카드 번호를 기본 키로 선정
- 자연스러운 기본 키를 찾을 수 없는 경우에는
레코드 번호와 같이 종종 인위적인 키 애트리뷰트를 릴레이션에 추가할 수 있음
(5) 대체 키 (alternate key)
- 기본 키가 아닌 후보 키
- 예: 신용카드 회사의 고객 릴레이션에서 기본 키는 신용카드번호로 선정하면 대체 키는 주민등록번호.

(6) 외래 키 (foreign key)
- 어떤 릴레이션의 기본 키를 참조하는 애트리뷰트
- 관계 데이터베이스에서 릴레이션들 간의 관계를 나타내기 위해서 사용됨
- 외래 키 애트리뷰트는 참조되는 릴레이션의 기본 키와 동일한 도메인을 가져야 함
- 자신이 속한 릴레이션의 기본 키의 구성요소가 되거나 되지 않을 수 있음.
* 외래 키의 유형
- 기본 키의 구성요소가 되는 외래 키

2.4) 무결성 제약조건
* 데이터 무결성 (data integrity)
- 데이터의 정확성 또는 유효성을 의미
- 일관된 데이터베이스 상태를 정의하는 규칙들을 묵시적으로 또는 명시적으로 정의함
- 데이터베이스가 갱신될 때 DBMS가 자동적으로 일관성 조건을 검사하므로
응용 프로그램들은 일관성 조건을 검사할 필요가 없음
* 무결성 제약조건의 특징
- 스키마의 한 부분
- 데이터베이스의 상태(또는 상태들의 순서)에 대한 제한
- DBMS가 시행
* 릴레이션 내의 무결성 제약조건
- 오직 한 릴레이션만 포함, 릴레이션 스키마의 한 부분
* 릴레이션 사이의 무결성 제약 조건
- 여러 릴레이션을 포함, 릴레이션 스키마 또는 데이터베이스 스키마의 한 부분.
2.4.1) 도메인 제약조건 (domain constraint)
* 도메인 제약조건 (domain constraint)
- 각 애트리뷰트 값이 반드시 원자값이어야 함
- 애트리뷰트 값의 디폴트 값, 가능한 값들의 범위 등을 지정할 수 있음
- 데이터 형식을 통해 값들의 유형을 제한하고, CHECK 제약 조건을 통해 값들의 범위를 제한할 수 있음
- SQL2는 도메인을 명시적으로 정의하는 것을 허용하지만, 오라클은 지원하지 않음
2.4.2) 키 제약조건 (key constraint)
* 키 제약조건(key constraint)
- 키 애트리뷰트에 중복된 값이 존재해서는 안됨
2.4.3) 기본 키와 엔티티 무결성 제약조건 (entity integrity constraint)
* 기본 키와 엔티티 무결성 제약조건 (entity integrity constraint)
- 릴레이션의 기본 키를 구성하는 어떤 애트리뷰트도 널값을 가질 수 없음
- 대체 키에는 적용되지 않음
- 사용자는 릴레이션을 생성하는 데이터 정의문에서
어떤 애트리뷰트가 릴레이션의 기본 키의 구성요소인가를 DBMS에게 알려줌
2.4.4) 외래 키와 참조 무결성 제약조건 (referential integrity constraint)
* 외래 키와 참조 무결성 제약조건 (referential integrity constraint)
- 참조 무결성 제약조건은 두 릴레이션의 연관된 투플들 사이의 일관성을 유지하는데 사용됨
- 관계 데이터베이스가 릴레이션들로만 이루어지고,
릴레이션 사이의 관계들이 다른 릴레이션의 기본 키를 참조하는 것을 기반으로 하여 묵시적으로 표현되기 때문에
외래 키의 개념이 중요
- 릴레이션 R2의 외래 키가 릴레이션 R1의 기본 키를 참조할 때 참조 무결성 제약조건은 아래의 두 조건 중 하나가 성립되면 만족됨
-- 외래 키의 값은 R1의 어떤 투플의 기본 키 값과 같다
-- 외래 키가 자신을 포함하고 있는 릴레이션의 기본 키를 구성하고 있지 않으면 널값을 가진다

2.4.5) 무결성 제약조건의 유지
(0) 무결성 제약조건의 유지
- 데이터베이스에 대한 수정 연산은 삽입 연산, 삭제 연산, 갱신 연산으로 구분함
- DBMS는 각각의 갱신 연산에 대하여 데이터베이스가 무결성 제약조건들을 만족하도록 필요한 조치를 취함
- DBMS는 외래 키가 갱신되거나, 참조된 기본 키가 갱신되었을 때 참조 무결성 제약조건이 위배되지 않도록 해야 함
- EMPLOYEE 릴레이션의 DNO 애트리뷰트가
DEPARTMENT 릴레이션의 기본 키인 DEPTNO를 참조하는 외래 키이므로,
DEPARTMENT를 참조된 릴레이션, EMPLOYEE를 참조하는 릴레이션으로 부르기로 함.

(1) 삽입
- 참조되는 릴레이션에 새로운 투플이 삽입되면 참조 무결성 제약조건은 위배되지 않음
- DEPARTMENT에 새로 삽입되는 투플의 기본 키 애트리뷰트의 값에 따라서는
도메인 제약조건, 키 제약조건, 엔티티 무결성 제약조건 등을 위배할 수 있음
- 참조하는 릴레이션에 새로운 투플을 삽입할 때는
도메인 제약조건, 키 제약조건, 엔티티 무결성 제약조건 외에 참조 무결성 제약조건도 위배할 수 있음
-- 예: EMPLOYEE 릴레이션에 (4325, 오혜원, 6)이라는 투플을 삽입하면 참조
-- 무결성 제약조건을 위배하게 됨
(2) 삭제
- 참조하는 릴레이션에서 투플이 삭제되면
도메인 제약조건, 키 제약조건, 엔티티 무결성 제약조건, 참조 무결성 제약조건 등 모든 제약조건을 위배하지 않음
- 참조되는 릴레이션에서 투플이 삭제되면 참조 무결성 제약조건을 위배하는 경우가 생기거나 생기지 않을 수 있음
-- 예1 : DEPARTMENT 릴레이션에서 네 번째 투플인 (4, 홍보, 8)을 삭제하더라도 참조, 무결성 제약조건을 위배하지 않음
-- 예2 : DEPARTMENT 릴레이션에서 세 번째 투플인 (3, 개발, 9)를 삭제하면 참조, 무결성 제약조건을 위배하게 됨
* 참조 무결성 제약조건을 만족시키기 위해서 DBMS가 제공하는 옵션
(3) 제한 (restricted)
- 위배를 야기한 연산을 단순히 거절
-- 예: DEPARTMENT 릴레이션에서 (3, 개발, 9)를 삭제하면
참조 무결성 제약조건을 위배하게 되므로 삭제 연산을 거절
(4) 연쇄 (cascade)
- 참조되는 릴레이션에서 투플을 삭제하고, 참조하는 릴레이션에서 이 투플을 참조하는 투플들도 함께 삭제
-- 예: DEPARTMENT 릴레이션에서 (3, 개발, 9)를 삭제하면
EMPLOYEE 릴레이션에서 부서번호 3을 참조하는 두 번째 투플과 다섯 번째 투플도 함께 삭제

* 참조 무결성 제약조건을 만족시키기 위해서 DBMS가 제공하는 옵션(계속)
(5) 널값 (nullify)
- 참조되는 릴레이션에서 투플을 삭제하고,
참조하는 릴레이션에서 이 투플을 참조하는 투플들의 외래 키에 널값을 삽입
-- 예: DEPARTMENT 릴레이션에서 (3, 개발, 9)를 삭제하면
EMPLOYEE 릴레이션에서 부서번호 3을 참조하는 두 번째 투플과 다섯 번째 투플의 부서번호에 널값을 삽입
(6) 디폴트값
- 널값을 넣는 대신에 디폴트값을 넣는다는 것을 제외하고는 바로 위의 옵션과 비슷함
(7) 수정
- DBMS는 수정하는 애트리뷰트가 기본 키인지 외래 키인지 검사함
- 수정하려는 애트리뷰트가 기본 키도 아니고 외래 키도 아니면 수정 연산이 참조 무결성 제약조건을 위배하지 않음
- 기본 키나 외래 키를 수정하는 것은
하나의 투플을 삭제하고 새로운 투플을 그 자리에 삽입하는 것과 유사하므로,
삽입 및 삭제에서 설명한 제한, 연쇄, 널값, 디폴트값 규칙이 수정 연산에도 적용됨
- 오라클에서는 수정 연산에 대해 제한적으로 참조 무결성 제약조건을 유지
'프로그래밍 공부 > DataBase (DB)' 카테고리의 다른 글
[ 데이터베이스 이론 ] 공부 정리 - 4강. SQL INSERT, DELETE, UPDATE문 (0) | 2023.05.19 |
---|---|
[ 데이터베이스 이론 ] 공부 정리 - 4강. SQL SELECT문 (1) | 2023.05.19 |
[ 데이터베이스 이론 ] 공부 정리 - 3강. 관계 대수 (관계 데이터 모델) (0) | 2023.05.19 |
[ 데이터베이스 이론 ] 공부 정리 - 1강. 데이터베이스 시스템 (1) | 2023.05.17 |
[ 데이터베이스 이론 ] 공부 정리 - 목차 (0) | 2023.05.16 |