<관계 데이터 모델>
: 동일한 구조(릴레이션)의 관점에서 모든 데이터를 논리적으로 구성.
- 논리적으로 연관된 데이터를 연결하기 위해서 링크나 포인터를 사용하지 않음
- 선언적인 질어를 통한 데이터 접근 -> 사용자는 원하는 데이터(what)만 명시하고 어떻게 이 데이터를 찾을 것인가(how)는 명시하지 않음
- 응용 프로그램들은 DB내의 레코드들의 어떠한 순서와도 무관하게 작성됨
관계 데이터 모델이 큰 성공을 거둔 요인
1. 바탕이 되는 데이터 구조로서, 간단한 테이블(릴레이션)을 사용
2. 중첩된 복잡한 구조가 없음
3. 집합개념을 이용한 데이터 처리
4. 다른 모델에 비해 이론이 잘 정립
5. 관계 데이터베이스 설계와 효율적인 질의 처리 면에서 뛰어난 장점
6. 표준 데이터베이스 응용(인사, 재무, 회계 관리등)에 좋은 성능을 보임
7. 숙련되지 않은 사용자도 쉽게 이해할 수 있음
2.1 관계 데이터 모델의 개념
기본적인 용어
- 릴레이션(relation): 2차원의 테이블
- 레코드: 릴레이션의 각 행
- 튜플: 레코드를 좀 더 공식적으로 부르는 용어
- 어트리뷰트: 릴레이션에서 이름을 가진 하나의 열
- 차수: 열들의 수
- 카디날리티: 행들의 수
도메인
- 한 어트리뷰트(열)에 나타날 수 있는 값들의 집합
- 각 어트리뷰트 도메인의 값들은 원자값
- 프로그래밍 언어의 데이터 타입과 유사
- 동일한 도메인이 여러 어트리뷰트에서 사용이 가능
차수와 카디날리티
- 차수: 한 relation에 들어있는 attribute의 수 -> 열의 수
- 유효한 relation의 최소 차수는 1 -> 열이 없는 relation은 허용 x
- relation의 차수는 자주 바뀌지 않음
- 카디날리티: relation의 튜플 수 -> 행의 수
- 유효한 relation은 카디날리티 0을 가질 수 있음 0> 행이 없는 relation은 허용
- relation의 카디날리티는 시간이 지남에 따라 계속 변함
널값(null value)
- '알려지지 않음' 혹은 '적용할 수 없음'을 나타내기 위해 널값을 사용
- 즉, 도메인에 속하지 않는 데이터를 표현하기 위해 사용
릴레이션 스키마
- 릴레이션의 이름과 릴레이션 애트리뷰트들의 집합
- 표기법: 릴레이션 이름(애트리뷰트1, ..., 애트리뷰트N) -> 기본키에는 밑줄 표시
- 내포(intension)라고 함
릴레이션 인스턴스
- 릴레이션에 어느 시점에 들어있는 튜플들의 집합 -> 시간의 흐름에 따라 계속 변함
- 일반적으로 릴레이션에는 현재의 인스턴스만 저장됨
- 외연(extension)라고 함
관계 데이터베이스 스키마
- 하나 이상의 릴레이션 스키마들로 이루어짐
관계 데이터베이스 인스턴스
- 릴레이션 인스턴스들의 모임으로 구성됨
2.2 릴레이션의 특성
릴레이션(=투플들의 집합)의 특성
- 각 릴레이션은 오직 하나의 레코드 타입만 포함
- 한 애트리뷰트 내의 값들은 모두 같은 유형 -> 같은 도메인
- 애트리뷰트의 순서는 중요하지 않음
- 동일한 투플이 2개 이상 존재하지 않음 -> realtion은 투플들의 집합이고, 집합은 중복 허용 X. -> 키가 존재함
- 한 투플의 각 애트리뷰트는 원자값을 가짐
- 각 애트리뷰트의 이름은 한 릴레이션 내에서만 고유
- 투플(레코드)들의 순서와는 무관하다
2.3 릴레이션의 키
릴레이션 키
- 정의: 각 투플을 고유하게 식별할 수 있는 하나 이상의 애트리뷰트들의 모임
수퍼 키
- 정의: 한 릴레이션 내의 특정 투플을 고유하게 식별하는 하나의 애트리뷰트 또는 애트리뷰트들의 집합
- 투플들을 고유하게 식별하는데 꼭 필요하지 않은 애트리뷰트들을 포함할 수 있음
후보 키
- 정의: 각 투플을 고유하게 식별하는 최소한의 애트리뷰트들의 모임-> 수퍼키의 불필요성을 제거
- 모든 릴레이션에는 최소한 한 개 이상의 후보 키가 있어서 서로 다른 투플을 구분할 수 있다.
- 후보키도 두개 이상의 애트리뷰트들로 구성될 수 있으며, 이런 경우 복합 키라 부른다.
기본 키
- 정의: 한 릴레이션 내의 후보 키가 2개 이상 있으면 설계자 또는 데이터베이스 관리자가 이들 중에서 하나를 기본키로 설정함
기본키의 선택 기준
- 자연스러운 특성을 선정 -> 자연스러운 것이 없는 경우 인위적인 키 애트리뷰트를 추가하여 사용 가능
- 항상 어트리뷰트가 고유한 값을 가지는지 확인
- 확실하게 NULL값을 가지지 않는가 확인
- 값이 변경될 가능성이 없는 것
- 가능하면 작은 정수 값 또는 문자열을 갖는 것
- 가능하면 복합 기본키는 피할 것
대체 키
외래 키
- 정의: 어떤 릴레이션의 기본 키를 참조하는 애트리뷰트
- relation간의 관계를 나타내기 위해 사용됨
- 참조되는 기본키와 외래 키 애트리뷰트는 동일한 도메인을 가진다
- 자신이 속한 릴레이션의 기본 키의 구성요소가 되거나 되지 않을 수 있음
2.4 무결성 제약조건
2.4.1 데이터 무결성(Data Integrity)
- 데이터의 정확성 혹은 유효성을 의미
- 일관된 데이터베이스 상태를 정의하는 규칙들을 묵시적, 명시적으로 정의함
- DB 갱신시, DBMS가 자동적으로 일관성 조건을 검사하므로 응용 프로그램들은 일관성 조건을 검사할 필요가 없음
2.4.2 도메인 제약조건(Domain Constraint)
- 각 애트리뷰트 값이 반드시 원자값이어야 함
- 애트리뷰트 값의 디폴트 값, 가능한 값들의 범위 등을 지정할 수 있음
- 데이터 형식을 통해 값들의 유형을 제한하고, CHECK 제약조건을 통해 값들의 범위를 제한할 수 있음
- SQL2는 도메인의 명시적 정의를 허용하지만, 오라클은 지원하지 않는다.
2.4.3 기본 키 제약조건과 엔티티 무결성 제약조건(Entity Integrity Constraint)
- 키 제약조건: 키 애트리뷰트에 중복된 값이 존재해서는 안됨
- 기본 키가 각 투플들을 식별하기 위하여 사용되기 때문에, 릴레이션의 기본키를 구성하는 어떤 애트리뷰트도 널값을 가질 수 없다
- 대체 키에는 적용되지 않음
- 사용자는 릴레이션을 생성하는 데이터 정의문에서 어떤 애트리뷰트가 릴레이션의 기본 키의 구성요소인가를 DBMS에게 알려줌
2.4.4 외래 키와 참조 무결성 제약조건(referential integrity constraint)
- 참조 무결성 제약조건은 두 릴레이션의 연관된 튜플들 사이의 일관성을 유지하는데 사용됨
- 릴레이션 R2의 외래키가 릴레이션 R1의 기본키를 참조할 때, 참조 무결성 제약조건은 아래의 두 조건 중 하나가 성립되면 만족됨
1) 외래키의 값은 R1의 어떤 투플의 기본 키 값과 같다
2) 널 값을 허용(단 외래키가 자신을 포함하고 있는 릴레이션의 기본 키를 구성하고 있지 않음 -> 릴레이션의 기본키의 일부이면 널 값을 가질 수 없기 때문이다)
무결성 제약조건의 유지
- 데이터베이스에 대한 갱신 연산은 삽입, 삭제, 수정 연산으로 구분
- DBMS는 각각의 갱신 연산에 대하여 데이터베이스가 무결성 제약조건들을 만족하도록 필요한 조치를 취함
1) 삽입
- 참조되는 릴레이션에 새로운 투플이 삽입되면 참조 무결성 제약조건은 위배되지 않음
- 참조되는 릴레이션에 새로 삽입되는 투플의 기본 키 애트리뷰트값에 따라서는 도메인 제약조건, 키 제약조건, 엔티티 무결성 제약조건 등을 위배할 수 있음
- 참조하는 릴레이션에 새로운 투플을 삽입 시, 도메인 제약조건, 키 제약조건, 엔티티 무결성 제약조건 외에 참조 무결성 제약조건도 위배될 수 있다 -> 제약 조건을 위배하는 삽입 연산은 DBMS가 거절함으로써 무결성 유지
2) 삭제
- 참조하는 릴레이션에서 투플이 삭제되면 도메인 제약조건, 키 제약조건, 엔티티 무결성 제약조건, 참조 무결성 제약조건 등 모든 제약조건을 위배하지 않음
- 참조되는 릴레이션에서 투플이 삭제되면 참조 무결성 제약조건을 위배하는 경우(없는 투플을 참조하게 되는 경우)가 생기거나 생기지 않을 수 있음
참조 무결성 제약조건을 만족시키기 위해서 DBMS가 제공하는 옵션
1) 제한
: 위배를 야기한 연산을 거절
2) 연쇄
: 참조되는 릴레이션에서 투플을 삭제하고, 참조하는 릴레이션에서 이 투플을 참조하는 투플들도 함께 삭제
3) 널값(nullify)
: 참조되는 릴레이션에서 투플을 삭제하고, 참조하는 릴레이션에서 이 투플을 참조하는 투플들의 외래 키에 널값을 삽입
4) 디폴트값
: 널값을 넣는 대신에 디폴트값을 넣느다는 것을 제외하고는 바로 위의 옵션과 비슷함
3) 수정
- DBMS는 수정하는 애트리뷰트가 기본 키인지 외래 키인지 검사함
- 수정하려는 애트리뷰트가 기본 키도 아니고 외래 키도 아니면 수정 연산이 참조 무결성 제약조건을 위배하지 않음
- 기본키나 외래키를 수정하는 것은 하나의 투플을 삭제하고 새로운 투플을 그 자리에 삽입하는 것과 유사 -> 제한,연쇄,널값,디폴트값 규칙이 적용
- 오라클에서는 수정 연산에 대해 제한적으로 참조 무결성 제약조건을 유지