5장 관계 데이터 모델
5.1 관계 데이터 모델의 개념
5.1.1 관계 데이터 모델의 기본 용어
5.1.2 릴레이션과 데이터베이스의 구성
5.1.3 릴레이션의 특성
5.1.4 키의 종류
5.2 관계 데이터 모델의 제약
5.2.1 개체 무결성 제약조건
5.2.2 참조 무결성 제약 조건
- 릴레이션을 구성하는 요소와 특성, 키의 역할과 종류, 무결성 제약의 의미와 필요성에 대해 순차적으로 공부하는 동안
- 광계 데이터 모델에 대해 점점 더 깊이 이해하게 될 것이다.
5.1.1 관계 데이터 모델의 기본 용어
- 하나의 개체에 관한 데이터를 **릴레이션(relation).하나에 담아 데이터베이스에 저장한다.
속성 (열, 애트리뷰트) <-> 필드(field)
- 릴레이션의 열을 속성 또는 애트리뷰트(attribute) 라고 부른다.
- 릴레이션은 파일 관리 시스템의 파일, 속성은 해당파일의 필드(field)에 대응하는 개념이다.
투플 (행 , 개체의 인스턴스) <-> 레코드(record)
- 릴레이션의 행을 투플(tuple) 이라고 부른다.
- 개체의 인스턴스라고도 한다.
- 위의 예제는 4개의 투플 또는 4개의 고객 개체 인스턴스라고 한다.
- 파일 관리 시스템 관점에서 해당 파일의 레코드(record)에 대응하는 개념이다.
도메인 (domain)
- 속성 하나가 가질 수 있는 모든 값의 집합을 해당 소속의 도메인(domain)이라 한다.
- 그래서 도메인을 특정 속성이 가질 수 있는 모든 원자 값의 모임아라고도 정의한다.
- 네 가지 값을 모아 놓은 것이 등급 속성의 도메인이 된다.
- 시스템이 적합성을 판단하여 네 가지 이외의 값은 허용하지 않음으로써 항상 올바른 값만 유지할 수 있다는 장점이 있다.
- 고객 릴레이션처럼 고객이름 속성의 도메인은 CHAR(20), 즉 문자 20개로 구성된 문자 타입으로 정의하고, 나이 속성의 도메인은 INT, 즉 정수 타입으로 정의한다.
- 데이터 타입을 도메인, 변수를 속성으로 생각하면 이해하기 쉽다.
- 모에인을 데이터 타입으로 정의하더라도 서로 다른 속성의 도메인이 같은지 판단해 연산 가능 여부를 결정하기는 어렵지 않다.
널 값(NULL)
- 널 값은
- 특정 속성에 해당되는 값이 없음을 나타내므로 숫자 0이나 공백 문자와는 다르다.
차수 (속성의 갯수 6개)
- 하나의 릴레이션에서 속성의 전체 개수를 릴레이션의 차수(degree)라고 한다.
- 고객 릴레이션은 차수가 6이다.
- 모든 릴레이션은 최소 1 이상의 차수를 유지 해야한다.
카디널리티 (행부분의, 투플의 전체 개수)
- 하나의 릴레이션에서 투플의 전체 개수를 릴레이션의 카디널리티라고 한다.
5.1.2 릴레이션과 데이터베이스의 구성
- 릴레이션은 릴레이션 스키마와 릴레이션 인스턴스로 구성
릴레이션 스키마 (릴레이션 내포 relation intension)
- 릴레이션 스키마 (relation schema)는 릴레이션의 이름과 릴레이션에 포함된 모든 속성의 이름으로 정의하는 릴레이션의 논리적 구조다.
릴레이션이름 ( 속성이름 1, 속성이름 2 , ... , 속성 이름 n )
릴레이션 인스턴스 (릴레이션 외연 relation extension)
- 릴레이션 인스턴스(relation instance)는 어느 한 시점에 릴레이션에 존재하는 투플의 집합니다.
- 투플은 릴레이션 스키마에서 정의하는 각 속성에 대응하는 실제 값으로 구성.
- 고객 릴레이션에서는 4개의 투플로 구성된 릴레이션 인스턴스를 확인할 수 있다.
- 릴레이션 인스턴스는 간단히 릴레이션이라 부르기도 하고 릴레이션 외연(relation extension)이라고도 한다.
- 릴레이션 스키마는 자주 변하지 않는 다는 정적인 특징이 있지만
- 릴레이션 인스턴스는 투플의 삽입-삭제-수정이 자주 발생한다는 동적인 특징이 있다.
데이터베이스 스키마와 데이터베이스 인스턴스
- 특정 데이터베이스 스키마를 설계한다는 것인 필요한 모든 릴레이션의 스키마를 모두 정의한다는 뜻
- 데이터베이스 인스턴스는 어느 한 시점에서 데이터베이스에 저장된 데이터 내용의 전체 집합을 의미한다.
5.1.3 릴레이션의 특성
5.1.3.1 투플의 유일성 : 하나의 릴레이션에는 동일한 투플이 존재할 수 없다.
- 하나의 릴레이션에 똑같은 투플이 있으면 안 되고, 모든 투플에는 다른 투플과 구별되는 유일한 특성이 있어야한다.
- 관계 데이터 모델의 릴레이션에서는 하나 또는 여러 개의 속성을 미리 선정해 두고
- 이 속성값을 투플마다 다르게 지정하여 투플의 유일성을 판단한다.
- 아이디 속성의 값으로 유일성을 판단하는 경우다.
- 이처럼 투플을 유일하게 구별하기 위해 선정하는 속성 (또는 속성들의 모임)을 키(key) 라고 부른다.
- 키를 이용해 투플의 유일성이 만족되면 릴레이션에서 원하는 투플에 쉽게 접근할 수 있다.
5.1.3.2 투플의 무순서 : 하나의 릴레이션에서 투플 사이의 순서는 무의미하다.
- 투플 순서가 바뀐다고 다른 릴레이션이 될 수 없고
- 순서와 상관없이 투플 내용이 같아야 같은 릴레이션이다.
- 데이터 베이스는 위치가 아닌 내용으로 검색 되므로 투플의 순서는 중요하지 않다.
5.1.3.3 속성의 무순서 : 하나의 릴레이션에서 속성 사이의 순서는 무의미하다.
- 속성은 순서가 바뀌어도 다른 릴레이션이 될 수 없고
- 순서와 상관없이 같은 속성들로 구성되어 있어야 같은 릴레이션이다.
- 속성 값은 릴레이션에서 위치가 아닌 속성의 이름으로 접근 하므로
- 하나의 릴레이션에는 이름이 같은 속성이 존재할 수 없고
- 이름도 속성의 의미가 명확히 드러나는 것으로 사용하는 것이 좋다.
5.1.3.4 속성의 원자성 : 속성 값으로 원자 값만 사용할 수 있다.
- 모든 속성 값은 더는 분해할 수 없는 하나의 값, 즉 원자 값만 가질 수 있다.
- 특징이 있어 다중 값을 허용하지 않는다.
5.1.4 키의 종류
- 릴레이션에 포함된 투플들을 유일하게 구별해주는 역할은 속성 또는 속성들의 집합인 키가 담당한다.
- 키(key)는 관계 데이터 모델에서 중요한 제약조건을 정의한다.
- 키를 다음과 같이 슈퍼키, 후보키, 기본키, 대체키, 외래키
5.1.4.1 슈퍼키 (유일성)
- 슈퍼키(super key)는 유일성의 특성을 만족하는 속성 또는 속성들의 집합니다.
- 유일성 (uniqueness) 은 키가 갖추어야 하는 기본 특성으로, 하나의 릴레이션에서 키로 지정된 속성 값은 투플마다 달라야 한다.
- 고객 릴레이션에서 고객 아이디 속성은 모든 고객 투플마다 값이 달라야 하고
- 이를 통해 다른 투플과 유일하게 구별할 수 있으므로 슈퍼키가 될 수 있다.
- 따라서 (고객아이디, 고객이름) 속성 집합도 슈퍼키가 될 수 있다.
- 즉 고객 아이디를 포함하는 속성 집합은 모두 슈퍼키가 될 수 있다.
- 그래서 꼭 필요한 속성의 집합만으로 투플을 유일하게 구별할 수 있도록 하는 또 다른 키의 개념이 필요한다. 이것이 후보키(CK)이다.
5.1.4.2 후보키 (유일성 + 최소성)
- 후보키 (candidate key)는 유일성과 최소성을 만족하는 속성 또는 속성들의 집합니다.
- 최소성(minimality)은 꼭 필요한 최소한의 소성들로만 키를 구성하는 특성이다.
- 그러므로 하나의 속성으로 구성된 키는 당연히 최소성을 만족한다.
- 최소한의 속성들로만 이루어 지므로 슈퍼키 중에서 최소성을 만족하는 것이 후보키가 된다.
- 고객 아이디 속성은 단독으로 고객 투플을 유일하게 구별할 수 있으므로 후보키가 될 수 있다.
- 후보키가 되기 위해 만족해야 하는 유일성과 최소성의 특성은 새로운 투플이 삽입되거나 기존 투플의 속성 값이 바뀌어옫 유지 되어야 한다.
- 즉 릴레이션 인스턴스만 보고 유일성과 최소설을 판단해서는 안된다. 데이터베이스가 사용될 현실 세계의 환경까지 염두에 두고 속성의 본래 의미를 정확히 이해한후 슈터키와 후보키를 선별 해야한다.
- 고객이름 속성은 슈퍼키는 물론 휴보키로도 선택하지 않는 것이 바람직하다.
5.1.4.3 기본키 (유일성 + 최소성 + NOT NULL)
- 여러 후보키(CK) 중에 기본적으로 사용할 키를 반드시 선택해야 하는 데 이것이 기본키(PK)이다.
- 데이터베이스 사용 환경을 고려하여 적합한 것을 기본키로 선택하면 된다.
- 자연스럽게 고객 아이디 속성이 기본키가 된다.
- 선택한 기본키는 속성의 이름에 밑줄을 그어 표현한다.
- 다음과 같이 고객 릴레이션에 주소 속성이 추가된다면 고객 아이디 속성과 함께 속성 집합도 후보키(CK)가 될 수 있다.
PK 선택 기준
5.1.4.3.1 널 값을 가질 수 있는 속성이 포함된 후보키는 기본키로 부적합하다. (NOT NULL)
- 따라서 기본키가 널 값인 투플은 다른 투플들과 구별하여 접근하기 어려우므로 이런 가능성이 있는 키는 기본키로 선택하지 않는 것이 좋다.
5.1.4.3.2 갑이 자주 변경될 수 있는 속성이 포함된 후보키는 기본키로 부적합하다. (값 자주 변경 X)
- 값이 자주 변경되지 않는 속성으로 구성된 후보키를 기본키로 선택하는 것이 좋다.
5.1.4.3.3 단순한 후보키를 기본키로 선택한다. (자릿수 적은 정수 || 단순 문자열)
- 데이터베이스를 이용하는 일반 사용자뿐 아니라 데이터베이스를 실제로 처리하는 컴퓨터 시스템도 단순 값 처리를 선호한다.
5.1.4.4 대체키 (AK)
- 대체키(alternate key)는 기본키로 선택되지 못한 후보키들이다.
- 따라서 기본키로 선택되지 못한 (고객이름, 주소) 속성 집합이 대체키가 된다.
- 다른 릴레이션과의 관계에서 고려할 수 있는 외래키가 있다.
5.1.4.5 외래키(FK) 다른 릴레이션 관계 / 다른 릴레이션 PK 참조 / 자기 자신의 참조 가능
- 외래키(foreign key)는 어떤 릴레이션에 소속된 속성 또는 속성 집합이 다른 릴레이션의 기본키가 되는 키다.
- 다시 말해 다른 릴레이션의 기본키를 그대로 참조하는 속성의 집합이 외래키다.
외래키가 다른 테이블의 대체키를 참조하는 것도 가능하다. 기본키로 선택받지 못했지만 유일성과 최소성을 만족하는 대체키를 참조하더라도 관련 있는 투플을 구분할 수 있기 때문이다.
- 고객 릴레이션과 주문 릴레이션의 관계를 생각하자
- 고객 릴레이션은 속성이 6개이고, 고객 아이디 속성이 기본키다.
- 주문 릴레이션은 속성이 6개 이고, 주문 번호 속성이 기본키다.
- 주문 릴레이션의 주문 고객 속성이 고객 릴레이션의 기본키인 고객 아이디 속성을 참조하면 주문 고객 속성을 외래키라고 한다.
- 일반적으로 주문 릴레이션과 같이 외래키를 가진 릴레이션을 "참조한는 릴레이션"
- 고객 릴레이션 과 같이 기본키를 가진 릴레이션을 "참조되는 릴레이션"이라고 한다.
- 복잡한 외래키 사용의 예시
- 상담 릴레이션의 학번 속성은 학생 릴레이션의 기본키인 학번 속성을 참조하는 외래키
- 담당교사 속성은 교사 릴레이션의 기본키인 교사번호 속성을 참조하는 외래키다.
- 외래키를 기본키로 사용할 수도 있고 외래키를 포함하여 기본키를 구성할 수 있다.
- 자기 자신을 참조 (반드시 다른 릴레이션을 참조할 필요는 없다.)
- 고객 릴레이션은 고객아이디 속성이 기본키다.
- 추천고객 속성은 추천한 고객의 아이디를 의미하므로 같은 릴레이션의 고객 아이디, 즉 기본키를 참조하는 외래키이다.
- 외래키는 기본키를 참조하지만 기본키와 다른 특징이 있다.
- 다른 고객 투플과 달리 추천고객 속성의 값이 널이다.
- 외래키는 기본키를 참조하지만 기본키가 아니기 때문에 널 값을 가질수 있다. (외래키는 NULL 가능)
- 외래키가 기본키가 아니기 때문에 서로 다른 투플이 같은 값을 가질 수 있는 것 (외래키는 중복 가능)
5.2 관계 데이터 모델의 제약
- 무결성은 데이터에 결함이 없는 상태
- 즉 데이터가 정확하고 유효하게 유지 된 상태를 말한다.
- 무결성 제약조건의 주요 목적은 데이터베이스에 저장된 데이터의 무결성을 보장하고, 데이터베이스의 상태를 일관되게 유지 하는 것이다.
- 데이터베이스가 삽입-삭제-수정 연산으로 상태가 변하더라도 무결성 제약 조건은 반드시 지켜져야 한다.
- 데이터베이스 내부의 데이터를 보호한다는 관점에서 무결성은 보안과 유사하다.
- 무결성은 권한이 있는 사용자의 잘못된 요구에 의해 데이터가 부정확해지지 않도록 보호하는 것이다.
- 기본으로 포함하고 있는 무결성 제약 조건에는 개체 무결성 제약조건과 참조 무결성 제약조건이 있다.
5.2.1 개체 무결성 제약 조건 (integrity constraint)
- 개체 무결성 제약조건 (entity integrity constraint) 은 기본키를 구성하는 모든 속성은 널 값을 가지면 안 된다는 규칙이다.
- 그런데 기본키를 구성하는 속성 전체나 일부가 널 값이 되면 투플의 유일성을 판단할 수 없어 기본키의 본래 목적을 상실하게 된다.
- 예시를 보자
- 정소화와 정지영 고객 투플에서 기본키인 고객 아이디 속성의 값이 널이다.
- 고객 아이디 속성의 값이 널이지만 두 고객의 아이디가 같다고 판단 할 수도 없다.
- 따라서 하나의 릴레이션에는 동일한 투플이 존재할 수 없다는 릴레이션 고유의 특성을 만족시킨다고 장담할 수 없어 => 무결성 제약 조건을 위반한 예이다.
- 개체 무결성을 완성시킬려면
- 새로운 투플이 삽입되는 연산과 기존 투플의 기본키 속성값이 변경되는 연산이 발생할 때 기본키에 널 값이 포함되는 상황에서는 연산의 수행을 거부하면 된다.
5.2.2 참조 무결성 제약 조건 (entity integrity constraint)
- 참조 무결성 제약조건은 외래키에 대한 규칙으로 연관된 릴레이션들에 적용한다.
- 참조 무결성 제약조건 (referential integrity constraint) 이란 외래키는 참조할 수 없는 값을 가질 수 없다는 규칙이다.
- 두 릴레이션을 연관 시킬 수 없으므로 외래키 본래의 의미가 없어진다.
- 외래키는 자신이 참조하는 릴레이션에 기본키 값으로 존재하는 값, 즉 참조가 가능한 값만 가져야한다.
- 주문 고객중 cherry는 고객 릴레이션에 없는 ID이다.
- 존재하지 않는 고객이 주문했다는 의미가 되므로 이것은 현실 세계를 올바르게 반영한 것이 아니다.
- 그러므로 이 고객 릴레이션과 주문 릴레이션은 참조 무결성 제약 조건을 위반한 예이다.
- 주문 고객 속성 값이 널이라는 것은 주문한 고객이 누구인지 모를 뿐, 고객 릴레이션에 존재하지 않는 고객이 주문한 거승로 판단하기는 어렵다.
- 참조 무결성 제약조건을 만족시키려면 외래키가 참조 가능한 값만 가져야 하지만,
- 널 값을 가진다고 해서 참조 무결성 제약조건을 위반한 것으로 판단해야는 안된다.
'학교 전공 > 데이터베이스' 카테고리의 다른 글
연습문제 -데이터베이스 개론(3판) - 2장 데이터베이스 관리 시스템의 등장 배경 (0) | 2023.10.23 |
---|---|
연습문제 - 데이터베이스 개론(3판) - 1장 데이터베이스 기본 개념 (0) | 2023.10.23 |
데이터베이스 개론 - 8장 데이터베이스 설계 (1) | 2023.10.03 |
데이터베이스 개론 - 4장 데이터 모델링 (1) | 2023.10.02 |
데이터베이스 개론 - 3장 데이터베이스 시스템 (0) | 2023.09.19 |