4 장. 관계 데이터 모델과 관계 데이터베이스 제약조건 4.1 관계모델의 개념 4.2 관계 모델 제약조건과 관계 데이터베이스 스키마 4.3 갱신 연산과 제약조건 위반의 처리
4.1 관계모델의 개념 관계 모델은 데이터베이스를 릴레이션들의 모임으로 표현 릴레이션(relation) 개체, 혹은 개체간의 관계에 대한 사실을 표현한 데이터들로 이루어진 테이블 테이블의 각 열은 애트리뷰트, 각 행은 투플(tuple)이라고 함. 투플은 실세계의 개체, 혹은 개체간의 관계를 기술하는 관련된 데이터 값들의 모임.
[그림 4.1] STUDENT 릴레이션의 애트리뷰트와 투플들
도메인(domain) 원자 값들(atomic values)의 집합 예 Phone_numbers : 전화 번호들의 집합 Names : 개인의 이름들의 집합 Age : 16~60 사이의 사원들의 나이(정수) 도메인은 실제 데이터 타입으로 명시함 (int, char(10), …)
릴레이션 스키마(relation schema) 릴레이션의 구조에 대한 기술. R(A1, A2, ..., An)로 표기. R은 릴레이션 이름, Ai는 애트리뷰트 이름. 예) STUDENT(Name,SSN,BirthDate,Addr) 릴레이션 인스턴스
[그림 4.5] COMPANY 관계 데이터베이스 스키마
[그림 4.6] COMPANY 스키마의 관계 데이터베이스 인스턴스
4.2 관계 모델 제약조건과 관계 데이터베이스 스키마 제약조건은 모든 릴레이션 인스턴스들이 만족해야 하는 조건. 도메인 제약조건 키 제약조건 엔티티 무결성 제약 조건 참조 무결성 제약조건 의미적 무결성 제약조건
도메인 제약 조건 애트리뷰트에 대한 값은 그 애트리뷰트의 도메인에 속하는 원자값. 도메인과 관련된 데이터 타입 정수, 실수와 같은 표준 숫자형 문자, 고정길이 문자열, 가변길이 문자열 날짜, 시간 화폐단위, 메모 등
키 제약조건 릴레이션의 키(key): 릴레이션 내의 임의의 서로 다른 두 투플 t1과 t2에 대해 t1[SK] ≠ t2[SK]인 애트리뷰트의 최소 집합 SK. 릴레이션에는 키를 구성하는 애트리뷰트들의 집합이 존재해야 하며 릴레이션내의 투플은 키에 대해 유일한 값을 가져야 한다. 엔티티 무결성 제약조건: 기본 키 값으로 null 값을 가질 수 없다. 기본키가 투플들을 식별하는 데에 이용되기 때문.
외래키(foreign key): 릴레이션 스키마 R1에서 다음의 두 규칙을 만족하는 애트리뷰트들의 집합 FK dom(FK) = dom(릴레이션 스키마 R2의 기본 키 PK). 이때 FK는 릴레이션 R2를 참조한다고 함 R1의 한 투플 t1내의 FK값은 R2의 어떤 투플 t2내의 PK값과 일치하거나 null값을 가져야 함. t1[FK] = t2[PK]이면 투플 t1이 투플 t2를 참조한다(reference)고 말한다.
참조 무결성 제약조건 한 릴레이션에 있는 투플이 다른 릴레이션에 있는 투플을 참조하려면 반드시 참조되는 투플이 그 릴레이션내에 존재해야 함 참조 무결성 제약 조건은 릴레이션 스키마가 표현하는 개체들간의 관계로부터 생긴다. 의미적 무결성 제약조건
[그림 4.7] COMPANY 관계 데이터베이스 스키마에 표시된 참조 무결성 제약 조건들
관계형 데이터베이스 스키마: 릴레이션 스키마들의 집합+ 무결성 제약 조건들의 집합 제약 조건들이 데이터 베이스 인스턴스에 적용되기를 원하면 이들 제약 조건들을 데이터 정의어를 이용하여 관계 데이터베이스 스키마에 명시하여야 함
4.3 갱신 연산과 제약조건 위반의 처리 삽입, 삭제, 수정은 릴레이션에 대한 기본 갱신 연산 갱신 연산을 실행하는 경우 스키마에 정의된 무결성 제약 조건을 위반하지 않아야 함 삽입연산 – 네가지 제약 조건을 위반할 수 있음 삽입되는 투플 t에서 애트리뷰트의 값이 도메인에 없으면 도메인 제약 조건을 위반함
t에서 기본 키의 값이 다른 투플에서 이미 존재한다면 키 제약 조건을 위반하며, 널이면 엔티티 제약 조건을 위반함 제약 조건을 위반하면 그 삽입을 거부하거나 그 위반 사실을 사용자에게 알려야 함
삭제연산 투플이 삭제되는 경우 다른 테이블에서 참조하고 있는지 검사하여 그렇지 않는 경우에만 삭제함 (참조 무결성) 삭제 연산이 참조 무결성 제약 조건을 위반하는 경우 취할 수 있는 세가지 옵션 삭제를 거부
삭제되는 투플을 참조하는 투플들까지 모두 삭제 (연쇄 삭제) 삭제되는 투플을 참조하는 투플에서 외래키 값을 널로 바꾸거나 다른 유효한 투플을 참조하도록 변경 위의 세가지 옵션 중 사용자가 응용의 특성에 적합한 것을 선택하도록 하는 것이 바람직함
갱신연산 갱신 연산은 기본적으로 “삭제 후 삽입” 연산으로 간주할 수 있으므로 삽입과 삭제시의 문제점이 모두 나타남 기본 키나 외래키가 아닌 애트리뷰트 값의 변경은 문제가 없음