02. Relation Data Model-Summary
Relation Data Model
summary
릴레이션(Relation)
- 관계 데이터 모델의 핵심적인 개념으로 행과 열로 구성된 테이블
릴레이션 스키마(Relation Schema)
- 관계 데이터베이스의 릴레이션이 어떻게 구성되는지 어떤 정보를 담고 있는지에 대한 기본적인 구조를 정의
속성(attribute): 릴레이션 스키마의 열
도메인(domain): 속성이 가질 수 있는 값의 집합
차수(degree): 속성의 개수
릴레이션 인스턴스(Relation Instance)
- 릴레이션 스키마에 실제로 저장되는 데이터의 집합
튜플(tuple): 릴레이션의 행
카디날리티(cardinality): 튜플의 수
릴레이션 구조와 관련된 용어
| 릴레이션 용어 | 같은 의미로 통용되는 용어 | 파일 시스템 용어 |
|---|---|---|
| 릴레이션(relation) | 테이블(table) | 파일(file) |
| 스키마(schema) | 내포(intension) | 헤더(header) |
| 인스턴스(instance) | 외연(extension) | 데이터(data) |
| 튜플(tuple) | 행(row) | 레코드(record) |
| 속성(attribute) | 열(column) | 필드(field) |
릴레이션의 특징
1. 속성은 단일 값을 가짐
- 각 속성의 값은 도메인에 정의된 값만 가지며 그 값은 모두 단일 값이어야 함
2. 속성은 서로 다른 이름을 가짐
- 속성은 한 릴레이션에서 서로 다른 이름을 가져야 함
3. 한 속성의 값은 모두 같은 도메인 값을 가짐
- 한 속성에 속한 열은 모두 그 속성에서 정의한 도메인 값만 가질 수 있음
4. 속성의 순서는 상관없음
- 속성의 순서가 달라도 릴레이션 스키마는 같음
5. 릴레이션 내의 중복된 튜플은 허용하지 않음
- 하나의 릴레이션 인스턴스 내에서는 서로 중복된 값을 가질 수 없음
- 즉, 모든 튜플은 서로 값이 달라야 함
6. 튜플의 순서는 상관없음
- 튜플의 순서가 달라도 같은 릴레이션
- 관계 데이터 모델의 튜플은 실제 값을 가지고 있으며 이 값은 시간이 지남에 따라 데이터의 삭제, 수정, 삽입에 따라 순서가 바뀔 수 있음
키(Key)
1. 슈퍼키(super key)
- 튜플을 유일하게 식별할 수 있는 하나의 속성 혹은 속성의 집합
2. 후보키(candidate key)
- 튜플을 유일하게 식별할 수 있는 하나의 속성 혹은 속성의 집합으로, 속성의 최소 집합
3. 기본키(primary key, PK)
- 여러 후보키 중 하나를 선정하여 대표로 삼은 키
기본키 제약조건
- 릴레이션 내 튜플을 식별할 수 있는 고유한 값을 가져야 함
- NULL 값은 허용하지 않음
- 키 값의 변동이 일어나지 않아야 함
- 최대한 적은 수의 속성을 가진 것이어야 함
- 향후 키를 사용하는 데 있어서 문제 발생 소지가 없어야 함
4. 대리키(surrogate key) & 인조키(artificial key)
- 일련번호 같은 가상의 속성을 만들어 기본키로 삼은 것
5. 대체키(alternate key)
- 기본키로 선정되지 않은 후보키
6. 외래키(foreign key, FK)
- 다른 릴레이션의 기본키를 참조하는 속성
외래키의 특징
- 관계 데이터 모델에서 릴레이션 간의 관계를 표현
- 다른 릴레이션의 기본키를 참조하는 속성
- 참조하고(외래키) 참조되는(기본키) 양쪽 릴레이션의 도메인은 서로 같아야 함
- 참조되는(기본키) 값이 변경되면 참조하는(외래키) 값도 변경
- NULL 값과 중복값 등이 허용
- 자기 자신의 기본키를 참조하는 외래키도 가능
- 외래키는 기본키의 일부가 될 수 있음
무결성(integrity)
- 데이터베이스에 저장된 데이터의 일관성과 정확성을 지키는 것
일관성과 정확성을 잃어버린 데이터베이스는 정보 가치가 훼손되며 지속적인 무결성을 유지하기 위해 튜플의 삽입, 삭제, 수정 시 데이터의 제약조건 준수 여부를 확인해야 함
무결성 제약조건
1. 도메인 무결성 제약조건(domain integrity constraint)
- 도메인 제약(domain constraint)
- 모든 튜플은 릴레이션 스키마에 정의된 각 속성의 도메인에 지정된 값만 가져야 함
2. 개체 무결성 제약조건(entity integrity constraint)
- 기본키 제약(primary key constraint)
- 릴레이션은 기본키를 지정하고 그에 따른 무결성 원칙(기본키는 NULL 값을 가져서는 안되며 릴레이션 내에 오직 하나의 값만 존재해야 함)을 지켜야 한다는 조건
3. 참조 무결성 제약조건(referential integrity constraint)
- 외래키 제약(foreign key constraint)
- 자식 릴레이션의 외래키는 부모 릴레이션의 기본키와 속성의 도메인이 동일해야 하며, 자식 릴레이션의 값 변경 시 부모 릴레이션의 값에 제약을 받음
부모 릴레이션: 참조되는(제공하는) 릴레이션
자식 릴레이션: 참조하는(제공받는) 릴레이션옵션(부모 릴레이션에서 튜플을 삭제할 경우)
RESTRICTED: 자식 릴레이션에서 참조하고 있으면 부모 릴레이션의 삭제 작업을 거부CASCADE: 자식 릴레이션의 관련 튜플을 같이 삭제DEFAULT: 자식 릴레이션의 관련 튜플을 미리 설정해둔 값으로 변경NULL: 자식 릴레이션의 관련 튜플을 NULL 값으로 설정(NULL 값을 허가한 경우)
| 구분 | 도메인 | 키 | 키 |
|---|---|---|---|
| 도메일 무결성 제약조건 | 개체 무결성 제약조건 | 참조 무결성 제약조건 | |
| 제약 대상 | 속성 | 튜플 | 속성과 튜플 |
| 같은 용어 | 도메인 제약 (domain constraint) | 기본키 제약 (primary key constraint) | 외래키 제약 (foreign key constraint) |
| 해당되는 키 | - | 기본키 | 외래키 |
| NULL 값 | 허용 | 불가 | 허용 |
| 릴레이션 내 제약조건의 개수 | 속성의 개수와 동일 | 1개 | 0~여러개 |
| ETC | <li>튜플 삽입/수정 시 제약사항 우선 확인</li> | <li>튜플 삽입/수정 시 제약사항 우선 확인</li> | <li>튜플 삽입/수정 시 제약사항 우선 확인</li><li>부모 릴레이션의 튜플 수정/삭제 시 제약사항 우선 확인</li> |
+ 유일성(고유성) 제약조건(unique constraint)
- 속성의 모든 값은 서로 같은 값이 없어야 함
- 릴레이션 내의 각 튜플을 유일하게 식별할 수 있는 속성들의 집합
- 기본키 제약과 달리 NULL 값을 허용
관계대수(Relational algebra)
- 릴레이션에서 원하는 결과를 얻기 위해 수학의 대수와 같은 연산을 이용하여 질의하는 방법을 기술하는 언어
- 절차적 언어로, 하나 이상의 릴레이션에 연산을 수행하여 결과 릴레이션이 나오기까지의 절차를 확인하는 방법을 제공
관계대수 연산자
순수 관계연산(relational operations)
- 관계 데이터 모델을 위해 고안
- selection, projection, join, division, rename
일반 집합연산(set operations)
- 수학의 집합이론에서 차용
- 합집합(union), 교집합(intersection), 차집합(difference), 카티션 프로덕트(cartesian product)
단항 연산자(unary operator): 연산자 중 피연산자의 개수가 한 개인 연산자
이항 연산자(binary operator): 연산자 중 피연산자의 개수가 두 개인 연산자
관계대수 연산자 타입: 기본 연산자 다섯 개와 기본 연산자로부터 유도할 수 있는 유도 연산자로 구분
| 연산자 타입 | 대상 | 연산자 이름 | 기호 | 설명 |
|---|---|---|---|---|
| 기본 | 단항 | selection | σ | 릴레이션에서 조건에 만족하는 튜플을 추출 |
| 기본 | 단항 | projection | π | 릴레이션의 속성을 추출 |
| 추가 | 단항 | rename | ρ | 릴레이션이나 속성의 이름을 변경 |
| 유도 | 이항 | division | ÷ | 부모 릴레이션에 포함된 튜플의 값을 모두 가진 튜플을 분자 릴레이션에서 추출 |
| 기본 | 이항 | union | ∪ | 두 릴레이션을 합하여 하나로 반환 |
| 기본 | 이항 | difference | ㅡ | R1엔 속하고 R2에는 속하지 않는 튜플을 반환 |
| 유도 | 이항 | intersection | ∩ | 합병가능한 두 릴레이션의 공통 튜플을 반환 |
| 기본 | 이항 | cartesian product | X | 두 릴레이션을 수평적 연산으로 하나로 합쳐 반환 |
| 유도 | 이항 | 조인 | ||
| 동등 | ⋈ | 두 릴레이션의 공통 속성을 기준으로 속성값이 같은 튜플을 수평적으로 결합(= 연산자 사용) | ||
| 세타 | ⋈θ | 동등조인에서 비교연산자 사용 | ||
| 자연 | ⋈N | 동등조인에서 중복 속성을 제거 | ||
| 세미(left) | ⋉ | 자연조인 후 오른쪽 속성을 제거 | ||
| 세미(right) | ⋊ | 자연조인 후 왼쪽 속성을 제거 | ||
| 외부(left) | ⟕ | 자연조인 후 각각 방향의 모든 값을 결과로 추출 조인이 실패(또는 값이 없을 때) 값을 NULL로 채움 | ||
| 외부(right) | ⟖ | 〃 | ||
| 외부(full) | ⟗ | 〃 |
관계대수 기본 논리 기호
| 연산 | 의미 | 예시 |
|---|---|---|
| ∧ | AND (그리고) | σ_age > 25 ∧ gender = ‘Male’(Customer) |
| ∨ | OR (또는) | σ_id > 2 ∨ age = 31(Customer) |
| ¬ | NOT (부정) | σ_¬(gender = ‘Female’)(Customer) |
관계대수식(relational algebra expression)
- 대상이 되는 릴레이션과 연산자로 구성
- 적용 순서는 수학의 연산과 동일
단항 연산자: 연산자<조건> (R)조건>
- σ <A=3 or A=7> (R)
이항 연산자: (R1) 연산자<조건> (R2)조건>
- (R1) ⋈ <R1.A=R2.A> (R2)