1. 관계 데이터 모델
70년 IBM의 E.F.코드에 의해 처음 제안되었음. 외적으로는 단순한 테이블 형태이지만, 이론적으로는 수학적인 릴레이션을 기초로 함.
통상적인 테이블의 개념은 관계 데이터베이스 시스템이 기반으로 하고 있는 관계 데이터 모델 환경 하에서 사용하는 학술적인 용어와 다름.
- [ 통상적인 테이블 개념 => 관계 데이터 모델 용어 ]
- 테이블 그 자체 => 릴레이션(Relation)
- 테이블 이름 => 릴레이션 이름
- 열 => 애트리뷰트(Attribute)
- 행 => 튜플(Tuple)
데이터의 가장 작은 논리적 단위는 개개 데이터 값, 즉 애트리뷰트 값임.
데이터 값들은 더 분해할 수 없는 '원자 값(Atomic Value)'만을 허용함.
하나의 애트리뷰트가 취할 수 있는 같은 타입의 모든 원자 값들의 집합을 애트리뷰트의 '도메인(Domain)'이라고 함.
릴레이션에 있는 애트리뷰트 값들은 해당 도메인의 일부일 뿐이며, 없는 값들은 나중에 들어갈 수 있는 잠정적인 값들이 됨.
같은 도메인의 값들끼리 비교가 허용된다(or 의미가 있다)는 성질이 있음.
도메인은 값 전체를 DB 속에 분명하게 저장해 놓지 못하기 때문에, 본질적으로 개념적일 수밖에 없음. 하지만 정의의 한 부분으로 명세함으로써 애트리뷰트가 취할 수 있는 값을 제한할 수는 있음.
애트리뷰트는 도메인의 이름을 그대로 사용할 수도 있고 별도의 이름을 사용할 수도 있음. 하나의 도메인에 대해 둘 이상의 애트리뷰트가 정의될 수도 있음.
애트리뷰트의 이름이 같으면 구별이 어렵기 때문에, 한 릴레이션에서는 모든 애트리뷰트들의 이름이 반드시 달라야 함.
도메인을 별도로 정의하지 않는 경우 애트리뷰트 이름과 함께 도메인을 직접 명세할 수도 있음.
DCL RELATION STUDENT
(Sno INTEGER,
Sname CHAR(10),
Year INTEGER,
Dept CHAR(6));
지금까지 처럼 원자 값으로 된 도메인을 '단순 도메인'이라 하며, 단순 도메인 위에 정의된 애트리뷰트를 '단순 애트리뷰트'라고 함. 년, 월, 일을 <년, 월, 일>로 묶어서 "일자"라는 도메인으로 정의하는 경우 '복합 도메인'이라 하고, 복합 도메인으로 정의된 애트리뷰트를 '복합 애트리뷰트'라고 함. 하지만 이런 복합 애트리뷰트 값도 단순 애트리뷰트처럼 하나의 원자 값으로 취급하는 것이 일반적임.
2. 릴레이션의 개념
릴레이션은 '릴레이션 스키마'와 '릴레이션 인스턴스'로 구성됨.
릴레이션 R이 있다고 가정.
R의 스키마는 이름 "R"과 애트리뷰트 A1, A2, ... , An의 집합으로 구성되는데 편의상 R(A1, A2, ... , An)으로 표기함. 여기서 각 애트리뷰트는 도메인 D1, D2, ... , Dn의 한 도메인 Di와 정확히 대응됨.
R의 인스턴스는 한 시점에 R에 포함된 튜플의 집합임. 하나의 튜플은 R의 스키마에 정의된 각 애트리뷰트에 대응하는 값 <V1, V2, ... , Vn>으로 구성됨.
릴레이션 스키마 - '릴레이션 스킴' 또는 '릴레이션 내포(intension)'이라고도 함. 정의 자체이므로 시간에 따라 변하지 않는 정적인 성질을 가짐.
릴레이션 인스턴스 - '릴레이션' 또는 '릴레이션 외연(extension)'이라고도 함. 수정 가능하므로 시간에 따라 내용이 변하는 동적인 성질을 가짐.
관계 데이터 모델에서는 개체나 관계를 모두 릴레이션이라는 한 가지 방법으로 표현함. 따라서 개체를 표현하는 '개체 릴레이션'과 관계를 표현하는 '관계 릴레이션'으로 구분할 수 있음.
릴레이션은 수학의 관계(Relation)과 집합(Set)에 이론적 기초를 두고 있음.
수학에서 릴레이션 : 두 집합 간의 관계를 나타내는 개념. 보통은 릴레이션 R은 카티션 프로덕트 A × B의 부분집합으로 정의되며, A와 B를 릴레이션 R의 정의역(domain)과 공역(range)이라고 함.
카티션 프로덕트 : 카티션 프로덕트(Cartesian product)는 두 집합을 곱하는 연산을 의미함.
카티션 프로덕트를 기술하는 도메인의 순서는 그 결과에 영향을 주므로 중요함.
릴레이션 R의 정의에서 사용된 도메인(애트리뷰트)의 개수, n을 릴레이션 R의 '차수'라고 하며, 차수가 n인 릴레이션을 n차 릴레이션이라고 함.
릴레이션에 포함되어 있는 튜플의 수를 '카디널리티(Cardinality)'라고 함.
한 릴레이션에서 튜플은 계속 삽입, 삭제되기 때문에 카디널리티는 변하지만, 차수는 변하지 않음.
1차 릴레이션에서 릴레이션 인스턴스와 도메인의 차이를 명확히 해야 하는데, 인스턴스와 도메인 모두 한 타입으로 구성되지만, 도메인은 내용이 정적인 반면, 릴레이션 인스턴스는 내용이 항상 변할 수 있기 때문에 동적이라는 차이점이 있음.
3. 릴레이션의 특성
릴레이션은 외형적으로 테이블과 같아 보이지만 성질은 상당히 다름.
- 튜플의 유일성 - 한 릴레이션에 포함된 튜플은 모두 다름. 릴레이션이 튜플을 원소로 갖는 집합이라는 정의에서 나오는 당연한 성질임.
- 튜플의 무순서성 - 한 릴레이션에 포함된 튜플 사이에는 순서가 없음. 마찬가지로 집합이기 때문임.
- 애트리뷰트의 무순서성 - 한 릴레이션에 포함된 애트리뷰트 사이에는 순서가 없음. 릴레이션을 나타내는 테이블의 맨 위에 기술된 열 이름들은 릴레이션 스키마의 한 표현일 뿐임. 하나의 튜플은 <애트리뷰트 이름:값> 쌍의 집합으로 표현하면 충분하며, 이 쌍들 간에 어떤 순서가 존재하는 것은 아님.
- 애트리뷰트의 원자성 - 모든 애트리뷰트의 값은 원자 값임. 반복 그룹, 즉 값의 집합은 허용되지 않는다는 뜻임. 집합을 애트리뷰트 값으로 허용하지 않는 릴레이션을 '정규화 릴레이션'이라 하며, 관계 데이터 모델에서는 정규화 릴레이션만 취급함.
널(Null) 값 : 어떤 애트리뷰트 값에 대해 그 값을 아직 모른다거나 그 애트리뷰트가 해당되지 않기 때문에 그 값을 명세할 수 없는 경우를 표현하기 위해 사용하는 특별한 값. 관계 데이터 모델에서는 원자 값으로 취급함. 내부적으로 표현하는 방법은 시스템에 따라 다름. 공백이나 0과는 다름.
관계 모델에서는 기본적으로 정규화된 릴레이션만을 취급하기 때문에 정규화라는 수식어를 별도로 사용하지 않으며, 비정규화 릴레이션을 정규화 릴레이션으로 변환하는 과정을 '정규화'라고 함. 비 정규화 릴레이션은 쉽게 정규화가 가능함.
4. 관계 데이터베이스 개념
관계 데이터베이스 스키마는 릴레이션 스키마의 집합과 무결성 제약 조건으로 구성됨. 릴레이션 인스턴스들은 모두 무결성 제약 조건들을 만족시키고 있다고 간주함.
관계 데이터 모델은 컴퓨터에 관한 내부적 사항을 제외한 추상적 수준에서 데이터베이스 시스템을 표현한 것임.
프로그래밍에 비유하면 다음과 같음.
관계 데이터 모델 - 프로그래밍 시스템
릴레이션 - 파일
튜플 - 레코드
애트리뷰트 - 필드(필드 타입)
5. 데이터베이스 키
5.1. 기본 키
릴레이션은 집합이기 때문에 한 릴레이션에 있는 모든 튜플은 유일하며, 애트리뷰트 전부를 이용하면 모든 튜플을 항상 유일하게 식별 가능함. 하지만 하나 또는 몇 개만 지정해 식별할 수 있는 경우가 많음.
키 : 튜플을 유일하게 식별할 수 있는 애트리뷰트 집합.
- 더 정확한 정의
애트리뷰트 집합 A로 구성된 릴레이션 R을 가정.
R의 한 애트리뷰트 집합 K가 A의 부분 집합이며서 다음과 같은 두 성질을 만족하면 K를 R의 '후보 키(Candidate Key)'라고 함.
- 유일성 : 릴레이션에 있는 모든 튜플에 대해 K의 값은 모두 상이하고 유일함.
- 최소성 : 유일성을 가진 K가 둘 이상의 애트리뷰트로 구성되어 있을 때, 어느 한 애트리뷰트를 제외시켜도 유일성이 깨지면 안 됨. 즉 K는 모든 튜플들을 유일하게 식별하는데 꼭 필요한 애트리뷰트들로만 구성됨.
이런 애트리뷰트 집합(유일성을 갖는 속성 조합들의 집합)을 '슈퍼 키'라고 함.
후보 키의 성질은 튜플들이 새로 삽입되고 변경되더라도 항상 유지되어야 함.
모든 릴레이션은 적어도 하나의 후보 키를 반드시 가지며, 튜플을 식별하기 위한 도구로 DB설계자가 지정한 하나의 후보 키를 '기본 키(Primary Key)'라고 함. 후보 키들 중 기본 키로 지정되지 않은 것들은 '대체 키(Alternate Key)'라고 함.
기본 키로 지정되면 널 값을 가질 수 없으며, 편의상 밑줄을 그어 표시 됨.
기본 키는 주소가 아닌 값에 기반을 둔 내용 중심 주소법을 제공한다는 점에서 중요함. 관계 데이터베이스의 기본 접근 방법이 됨.
5.2. 외래 키
한 릴레이션(R)에서 쓰인 어떤 애트리뷰트(FK)의 값이 다른 릴레이션(S)의 기본 키 값이어야 하는 경우, 그 릴레이션(R)에서 해당 애트리뷰트를 '외래 키(Foreign Key)'라고 함.
FK는 릴레이션 S를 참조한다고 하고, R을 '참조 릴레이션', S를 '피 참조 릴레이션'이라고 함.
R과 S는 같은 릴레이션이어도 상관없으나, 외래 키와 기본 키가 정의된 도메인은 같아야 함. 또한 릴레이션 R의 외래 키가 반드시 릴레이션 R의 기본 키가 되거나 기본 키에 포함되어야 하는 것은 아님.
ex) 교수, 학과 릴레이션을 가정.
교수(교수번호, 교수이름, 학과번호, 직급)
학과(학과번호, 학과이름, 학과장교수번호, 학생수)
"교수" 릴레이션의 "학과번호"와 "학과" 릴레이션의 "학과장교수번호"는 각각 "학과" 릴레이션의 기본 키, "교수" 릴레이션의 기본 키 이므로, 외래 키임. 따라서 이들의 값은 각각 "학과" 릴레이션의 "학과번호" 와 "교수" 릴레이션의 "교수번호" 값들 중에 반드시 존재해야 함. 또한, "교수" 릴레이션의 "학과번호"는 "교수" 릴레이션의 기본 키에 포함되어 있지 않음.
R과 S가 다를 필요가 없다는 것에 대한 예.
교수진(교수번호, 교수이름, 학과번호, 학장교수번호)
"학장교수번호"는 "교수진" 릴레이션의 기본 키인 "교수번호"의 값이어야 하는 외래 키임. 기본 키와 외래 키가 하나의 릴레이션에서 정의됨.
중요한 것은 기본 키와 외래 키의 관계는 개체와 개체를 연결하는 도구로 사용되고 있다는 것임.
6. 무결성 제약
관계 데이터 모델이 가지고 있는 무결성 제약에는 키로부터 유래되는 '개체 무결성 제약'과 '참조 무결성 제약'이 있음. 두 제약을 기초로 세부적이고 특수한 제약들을 만들어 첨가할 수도 있음.
무결성 제약에서의 널은 통상적인 정보의 부재만을 의미하기 때문에 보통 공백으로 표현된 것도 널로 해석함.
6.1. 개체 무결성 제약
기본 키에 속해 있는 애트리뷰트는 언제 어느 때고 널 값을 가질 수 없음. 기본 키는 튜플들을 식별하는 기능을 가지고 있는데 널이 된다면 튜플을 식별할 수 없게 되어 기본 키 정의에 위반됨.
6.2. 참조 무결성 제약
릴레이션은 참조할 수 없는 외래 키 값을 가져서는 안 됨. 참조할 수 없는 외래 키 값이란 널이 아니면서 참조된 릴레이션의 어떤 기본 키 값과도 일치하지 않는 값을 의미함. 참조할 수 없는 외래 키 값이 있다면 존재하지 않는 튜플을 참조한다는 뜻이므로 모순됨.
기본 키 값은 개체 식별자를 나타내고 외래 키 값은 개체 참조를 나타냄. 외래 키 값이 널이라면 참조할 튜플이 결정되지 않은 것이므로 문제가 없지만 값으로 식별할 수 있는 튜플이 존재하지 않는 것은 문제가 됨.
두 제약은 DB 상태가 항상 만족해야 할 기본 규칙임. 규칙에 어긋나면 해당 DB는 부정확한 것으로 판정됨. DB 상태는 어느 시점에 DB에 저장되어 있는 데이터 값, 즉 DB 인스턴스를 말함.
사용자 입장에서, 제약을 유지하는 것은 시스템 수준에서 자동적으로 수행되길 바람. 제약의 유지는 고도의 시스템 설계와 데이터베이스 설계가 조화 되어야 달성 가능함.
'Major Review (학부) > Database' 카테고리의 다른 글
[DB] Ch05. 관계 대수와 관계 해석 (2) (2) | 2023.04.14 |
---|---|
[DB] Ch05. 관계 대수와 관계 해석 (1) (0) | 2023.04.13 |
[DB] Ch03. 데이터베이스 시스템의 구성 (0) | 2023.04.09 |
[DB] Ch02. 데이터베이스 관리 시스템 (DBMS) (0) | 2023.04.09 |
[DB] Ch01. 데이터베이스 환경 (0) | 2023.04.04 |
댓글