관계 데이터 모델과 제약조건
관계 데이터 모델
개요
- 지금까지 제안된 데이터 모델들 중에서 가장 개념이 단순한 모델중 하나
- IBM 연구소의 E.F.Codd가 1970년에 관계 데이터 모델을 제안
- 관계 데이터 모델을 최초로 구현한 관계 DBMS 시제품은 1970년 대에 IBM 연구소에서 개발된 **System R **이다
- 그 후 여러 모델들이 등장했지만 여전히 가장 널리 사용되는 DBMS이다.
성공 요인
- 바탕이 되는 데이터 구조로 간단한 테이블 사용
- 종첩된 복잡한 구조가 없다.
- 집합 위주로 데이터를 처리
- 숙련되지 않은 사용자도 쉽게 이해 가능
- 표준 데이터베이스 응용에 대해 좋은 성능을 보인다.
- 다른 데이터 모델에 비해 이론이 잘 정립되었다.
- 설계와 효율적인 질의 처리면에서 뛰어나다.
특징
- 동일한 구조(릴레이션)의 관점에서 모든 데이터를 논리적으로 구성하며 선언적인 질의어를 통한 데이터 접근을 제공.
- 응용 프로그램들은 데이터베이스 내의 레코드들의 어떠한 순서와도 무관하게 작성된다.
- 링크나 포인터를 사용하지 않는다.
- 사용자는 원하는 데이터만 명시하고 어떻게 찾을까는 명시하지 않아도 된다.
용어
- 릴레이션(relation): 2차원의 테이블
- 레코드(record): 릴레이션의 각 행
- 투플(tuple): 레코드를 좀더 공식적으로 부르는 용어
- 애트리뷰트(attribute): 릴레이션에서 이름을 가진 하나의 열
- 도메인 : 한 애트리뷰트에 나타날 수 있는 값들의 집합
- 각 애트리뷰트의 도메인 값은 원자값이어야한다.
- 차수(degree): 한 릴레이션에 들어 있는 애트리뷰트들의 수
- 카디날리티(cardinality): 릴레이션의 투플 수
- 널(NULL) : ‘알려지지 않음’ 또는 ‘적용할 수 없음’
용어 대응 관계
공식적인 용어 | 자주 사용되는 용어 | 파일 시스템의 용어 |
---|---|---|
릴레이션 | 테이블 | 화일 |
투플 | 행/레코드 | 레코드 |
애트리뷰트 | 열 | 필드 |
릴레이션 스키마(relation schema)
릴레이션을 위한 틀(framework). 릴레이션의 이름과 릴레이션의 애트리뷰트들의 집합.
관계 데이터베이스 스키마는 하나 이상의 릴레이션 스키마들로 이루어짐.
릴레이션 인스턴스(relation instance)
릴레이션에 어느 시점에 들어 있는 투플들의 집합
릴레이션의 특징
- 각 릴레이션은 오직 하나의 레코드 타입만 포함한다
- 동일한 투플이 두 개 이상 존재하지 않는다
- 한 애트리뷰트 내의 값들은 모두 같은 유형이다
- 각 애트리뷰트의 이름은 한 릴레이션 내에서만 고유하다
- 애트리뷰트들의 순서는 중요하지 않다
릴레이션의 키
각 투플을 고유하게 식별할 수 있는 하나 이상의 애트리뷰트들의 모임
특정 투플을 검색하거나 다른 투플들과 연관시킬 수 있도록 하기 위해 한 릴레이션 내의 각 투플을 애트리뷰트들의 값을 사용해서 고유하게 식별할 수 있어야 한다.
- 수퍼키(super key)
- 후보키(candidate key)
- 기본키(primary key)
- 대체키(alternate key)
- 후보키(candidate key)
- 외래키(foreign key)
수퍼 키
한 릴레이션 내의 특정 투플을 고유하게 식별하는 하나의 애트리뷰트 또는 애트리뷰트들의 집합
후보 키
각 투플을 고유하게 식별하는 최소한의 애트리뷰트들의 모임
기본 키
한 릴레이션에 후보 키가 2개 이상 있으면 설계자 또는 데이터베이스 관리자가 이들 중에서 하나를 기본 키로 선정.
대체키
기본 키가 아닌 후보 키
키들의 관계
외래 키
어떤 릴레이션의 기본 키를 참조하는 애트리뷰트
- 릴레이션들 간의 관계를 나타내기 위해 사용.
- 외래 키 애트리뷰트는 참조되는 릴레이션의 기본 키와 동일한 도메인을 가져야 한다.
- 자신이 속한 릴레이션의 기본 키의 구성요소가 되거나 되지 않을 수 있다.
데이터 무결성(data integrity)
데이터의 정확성, 유효성을 의미
- 일관된 데이터베이스 상태를 정의하는 규칙들을 묵시적으로 또는 명시적으로 정의해야함
- 일반적으로 데이터베이스 상태가 실세계에 허용되는 상태만 나타날 수 있도록 제한한다.
제한하는 조건 4가지
- 도메인 제약조건
- 키 제약조건
- 기본기와 엔티티 무결성 제약조건
- 외래키와 참조 무결성 제약조건
도메인 제약조건(domain constraint)
- 각 애트리뷰트 값은 반드시 원자값이어야한다.
- 애트리뷰트 값의 디폴트 값, 가능한 값들의 범위 등을 지정할 수 있다.
- 값들의 유형도 지정할 수 있고, check 조건을 통해 범위를 제한할 수 있다.
키 제약조건(key constraint)
키 애트리뷰트에 중복된 값이 존재해서는 안된다.
기본 키와 엔티티 무결성 제약조건(entity integrity constraint)
- 기본 키는 널 값을 가질 수 없다.
- 대체 키는 적용되지 않는다
외래 키와 참조 무결성 제약조건(referential integrity constraint)
- 외래 키의 값은 반드시 있는 값을 사용해야한다.(없는 값을 가리키면 안된다)
무결성 제약 조건의 유지
데이터베이스에 대한 수정이나 생성 등 갱신 연산의 수행 결과가 제약조건을 위배할 수 있다.
갱신 연산은 3가지로 구분된다.
- 삽입
- 삭제
- 수정
각 연산에 대해 데이터베이스가 무결성 제약 조건들을 만족하도록 필요한 조치를 취한다.
삽입
- 참조되는 릴레이션은 도메인, 키, 엔티티 무결성 제약조건등을 위배할 수 있다. (참조 무결성은 위배되지 않음)
- 참조하는 릴레이션은 도메인, 키, 엔티티 외에 참조 무결성도 위배할 수 있다.
삭제
- 참조하는 릴레이션에서 투플이 삭제되면 도메인 제약조건, 키 제약조건, 엔티티 무결성 제약조건, 참조 무결성 제약조건 등 모든 제약조건을 위배하지 않는다
- 참조되는 릴레이션에서 투플이 삭제되면 참조 무결성 제약조건을 위배하는 경우가 생기거나 생기지 않을 수 있다
참조 무결성 제약조건을 만족시키기 위한 옵션들
- 제한(restricted): 위배를 만드는 연산을 거절
- 연쇄(cascade): 참조되는 릴레이션에서 투플을 삭제하고, 참조하는 릴레이션에서 이 투플을 참조하는 투플들도 함께 삭제
- 널값(nullify): 참조되는 릴레이션에서 삭제되면, 참조하는 릴레이션에서 널값 삽입
- 디폴트값: 널값 대신 디폴트값을 넣는다.
수정
- DBMS는 수정하는 애트리뷰트가 기본 키인지 외래 키인지 검사한다
- 수정하려는 애트리뷰트가 기본 키도 아니고 외래 키도 아니면 수정 연산이 참조 무결성 제약조건을 위배하지 않는다
- 기본 키나 외래 키를 수정하는 것은 하나의 투플을 삭제하고 새로운 투플을 그 자리에 삽입하는 것과 유사하므로, 삽입 및 삭제에서 설명한 제한, 연쇄, 널값, 디폴트값 규칙이 수정 연산에도 적용된다