본문 바로가기
컴퓨터공학/데이터베이스

관계 데이터 모델과 제약조건

by Daniel.kwak 2018. 10. 27.

목표


1. 관계 데이터 모델에 대해 알아본다.

2.릴레이션(테이블)의 특성과 키에 대해 알아본다.

3.무결성 제약 조건에 대해 알아본다.




관계 데이터 모델


관계 데이터 모델은 현재까지 제안된 데이터 모델 중 가장 단순한 개념의 모델이며 가장 널리 쓰이고 있다. 바탕이 되는 데이터 구조로서 간단한 테이블을 사용하고 중첩된 구조가 없다. 숙련되지 않은 사용자도 쉽게 접근할 수 있으며 관계 데이터베이스 설계와 효율적인 질의 처리 면에서 장점을 가지기 때문이다. 조금 더 살펴보자.

-동일한 구조(테이블) 관점에서 모든 데이터를 논리적으로 구성한다.

-선언적 질의를 통해 데이터에 접근한다.

-응용 프로그램과 데이터베이스 내의 레코드의 순서는 무관하다. 

-사용자는 원하는 데이터(what)만 명시하고 어떻게 찾을 것인가(how)에 대한 것은 명시할 필요가 없다. 

-논리적 데이터를 연결하기 위해 링크나 포인터를 사용하지 않는다. 




도메인 : 한 애트리뷰트에서 나타날 수 있는 값들의 집합. 프로그래밍 언어의 자료형이라 생각하면 된다. 
차수(degree) : 한 릴레이션에 들어있는 애트리뷰트의 수
카디날리티 : 릴레이션의 튜플의 수

릴레이션 스키마 : 릴레이션 이름과 애트리뷰트들의 집합. 기본키에는 밑줄로 표시하며 내포(intension)이라고 부른다.

릴레이션 인스턴스 : 릴레이션의 어느 시점에 들어있는 튜플의 집합. 외연(extension)이라고 한다.






릴레이션의 특성


-각 릴레이션은 오직 하나의 레코드 타입만 포함.

-한 애트리뷰트의 값 유형은 모두 같으며 애트리뷰트의 순서는 중요치 않다.

-키가 존재하므로 중복 튜플이 존재할 수 없다.

-한 튜플의 해당 애트리뷰트 값은 원자값(하나의 값)만을 가진다.

-애트리뷰트 이름은 릴레이션 내에서 고유하다.

릴레이션의 키는 튜플들을 고유하게 식별하거나 하나 이상의 애트리뷰트들의 모임이다. 


슈퍼키(Super Key)

한 릴리이션 내에서 튜플을 고유하게 식별할 수 있는 하나의 애트리뷰트 또는 애트리뷰트의 집합. 예를 들어 신용카드 회사의 고객 릴레이션에서 슈퍼키는 (신용카드번호,주소) , (주민등록번호, 이름) , (주민등록번호) 이다.

튜플들을 고유하게 식별하는데 꼭 필요하지 않은 애트리뷰트도 포함할 수 있다.


후보키(Candidate Key)

각 튜플을 고유하게 식별하는 최소한의 애트리뷰트들의 모임. 예를 들어 (신용카드번호, 주소)는 후보키가 아니지만, (신용카드번호)는 후보키이다. 

모든 릴레이션에는 최소한 하나 이상의 후보키가 존재한다. 후보키도 하나 이상의 애트리뷰트로 이루어 질 수 있으며 이 경우 복합키(Composite key)라 부른다.


 


여기서 (학번,과목번호)는 후보키이고 복합키이다.


기본키(Primary Key)

한 릴레이션에서 후보키가 둘 이상일 경우, 데이터베이스 설계자가 이들 중 하나를 기본키로 선정한다. 만약 자연스러운 기본키를 찾을 수 없을경우 인위적인 키 애트리뷰트 (레코드 번호 따위)를 기본키로 설정할 수도 있다.



대체키(Substitute Key)

기본키가 아닌 후보키.






외래키(Foreign Key)

어떤 릴레이션의 기본키를 '참조'하는 애트리뷰트이다. 관계 데이터베이스에서 릴레이션 간의 관계를 표현하기 위해 사용된다. 외래 키는 참조되는 릴레이션의 기본 키와 동일한 도메인(자료형)을 가져야 한다. 자신이 속한 릴레이션의 기본키의 구성요소가 될 수도, 안 될 수도 있다. 외래키의 여러 유형을 그림으로 살펴보자.


유형1) 다른 릴레이션의 기본키를 참조하는 외래키 






유형2) 자체 릴레이션의 기본키를 참조하는 외래키 


유형3) 기본키의 구성요소가 되는 외래키 






무결성 제약 조건

데이터의 정확성과 유효성을 의미한다. 일관된 데이터베이스를 유지하는 묵시적, 명시적 규칙들로서 DBMS가 책임을 지기 때문에 응용 프로그램에서는 신경쓰지 않는다.

도메인 제약 조건
각 애트리뷰트 값은 반드시 원자값이여야 한다. 미리 애트리뷰트 값의 디폴트 값이나 유형,범위를 지정할 수는 있다. 

키 제약 조건
키 애트리뷰트에 중복된 값이 존재해서는 안된다. 

기본키와 엔티티 무결성 제약 조건
기본키를 구성하는 어떤 애트리뷰트 값도 널값을 가질수는 없다. 대체 키에는 적용되지 않으며 사용자는 릴레이션을 생성하는 DDL 질의에서 어떤 키가 기본키인지 DBMS에게 알려준다. 

외래키와 참조 무결성 제약 조건
두 릴레이션 간에 일관성을 유지하기 위해 사용된다.
릴레이션 R2의 외래키가 릴레이션R1의 기본키를 참조할 때 아래 두 조건을 만족하면 참고 무결성 제약 조건을 만족한다.
1.외래 키의 값은 R1의 어떤 튜플의 기본 키 값과 같다.
2.만약 외래키가 자신을 포함하고 있는 릴레이션의 기본키를 구성하고 있지 않으면 널 값을 가진다. 

무결성 제약 조건의 유지
데이터베이스 갱신 연산은 삽입,삭제,수정 연산으로 구분한다. DBMS는 각 연산에 대해서 무결성을 유지할 수 있도록 필요한 조치들을 취한다. 특히 외래 키가 갱신되거나, 
참조된 기본 키가 갱신될 경우 참조 무결성 제약 조건을 위배하지 않도록 해야한다. 아래 릴레이션들의 예제를 통해서 각 연산에 대해서 살펴보자.



1.삽입
참조되는 릴레이션에서 새로운 튜플이 삽입되면, 참조 무결성 제약조건은 위배하지 않는다. 
DEPARTMENT에 새로 삽입되는 투플의 기본 키 애트리뷰트의 값에 따라서 도메인 제약조건, 키 제약조건, 엔티티 무결성 제약조건등을 위배할 수 있다.
마찬가지로, 참조하는 릴레이션에서도 새 튜플을 삽입할때 도메인, 키, 엔티티 무결성 제약조건 외에도 참조 무결성 제약조건도 위배할 수 있다.
예를들어 (4325,오혜원,6)이라는 튜플 삽입 시, 참조 무결성 제약조건을 위배하게 된다.

2.삭제
참조하는 릴레이션에서 튜플이 삭제되면 도메인, 키, 엔티티, 참조 무결성 제약조건 등 모든 제약조건을 위배하지 않는다.
참조되는 릴레이션에서 투플이 삭제되면 참조 무결성 제약조건을 위배할 수도 있다. 
예를 들어,  DEPARTMENT 릴레이션에서 네번째 튜플을 삭제해도 참조 무결성 제약조건은 위배하지 않지만 세번째 튜플인 (3,개발,9)를 삭제하면 참조 무결성 제약조건을 위배하게 된다. 

그럼 참조 무결성 제약조건을 만족시키기 위해서 DBMS는 어떤 옵션을 제공하는가?

제한(restricted)
위배를 야기한 연산을 단순히 거절하는 것이다. 참조되는 릴레이션에서 (3,개발,9) 튜플을 삭제하는 연산 자체를 거부하는 것.

연쇄(cascade)
참조되는 릴레이션에서 투플을 삭제하고, 참조하는 릴레이션에서 이 튜플을 참조하는 튜플들도 모두 함께 삭제하는 것이다.
예를 들어 DEPARTMENT에서 (3,개발,9)를 삭제하면 이    를 참조하는 EMPLOYEE 릴레이션의 두번째, 다섯번째 튜플도 함께 삭제하는 것이다. 


널값(nullify)
참조되는 릴레이션에서 투플을 삭제하고, 참조하는 릴레이션에서 이 투플을 참조하는 튜플들의 외래 키에 널 값을 삽입하는 것.

디폴트 값
널 값을 넣는 대신에, 디폴트 값을 넣는다는 차이점만 있고 3번과 동일하다.


3.수정
DBMS에서 수정하는 애트리뷰트가 기본키인지, 외래키인지 검사한다. 둘 다 아니라면 참조 무결성 제약조건을 위반하지 않지만, 기본키나 왜래키를 수정하는 것은 하나의 투플을 삭제하고 새로운 투플을 그 자리에 삽입하는 것과 유사하므로, 삽입 및 삭제의 무결성 유지 제약 조건들이 적용된다. 


'컴퓨터공학 > 데이터베이스' 카테고리의 다른 글

트랜잭션  (0) 2018.10.31
뷰(VIEW)  (0) 2018.10.31
데이터베이스 정규화  (0) 2018.10.30
데이터베이스의 인덱스  (0) 2018.10.28
SQL  (0) 2018.10.28
데이터베이스 시스템 개요  (0) 2018.10.27