relation data model은 가장 심플한 데이터 모델 중 하나다. 배우기 쉽다. 성능도 좋다. 다 좋다.
개념적 데이터 모델, 구현 데이터 모델, 물리적 데이터 모델이 있는데 관계 데이터 모델은 구현 데이터 모델이다.
데이터를 관계라는 개념을 사용해 표현한 데이터 모델이다.
Relation(table)
: 개체를 표현하기 위한 2차원 테이블.
Tuple
: relation에서 row(행)으로 표현한다. 하나의 개체를 의미한다. 각 튜플은 유일해야 한다.
Attribute
: relation에서 column(열)으로 표현한다. 개체의 속성들을 의미한다.
Degree
: 한 Relation 안에 attribute 개수
Cardinality
: 한 Relation 안에 tuple 개수
Relation은 튜플(레코드, 로우)의 모임이고 Relation의 관계를 정의한 것이 관계 모델이다. Relational data model은 Relation 단위로 다양한 연산을 통해 쿼리문을 수행하는 data model이다.
Degree가 0일 수는 없음. Cardinality는 가능. Degree가 0이면 테이블이 만들어진 걸까?
속성에서 발생할 수 있는 value set으로 구성. 남자=0, 여자=1 정의했다면, 그 외 값은 제한하는 것을 도메인이라고 한다.
각 튜플의 애트리뷰트는 도메인에 속하는 범위 값이어야 한다.
relation 이름과 attributes set으로 구성. pk는 밑줄로 attribute에서 구분. (intension)
특정 시점에서 relation 안에 포함된 tuples set으로 구성. (extension)
relation : set of tuples
relation 특징
각 relation은 하나의 record type만 포함한다.
한 attribute 안에 있는 모든 value들은 같은 type이다.
attribute 순서는 중요하지 않다. pk가 2번째 위치할 수도 있다.
2개 이상의 똑같은 tuple들은 없다. pk로 구분.
tuple 안에 각 attribute는 원자 값을 가진다.
attribute 이름은 하나의 relation 안에서 다 달라야 함.
tuple 순서 역시 중요하지 않다.
키는 애트리뷰트다. 애트리뷰트 중 어떤 특징을 가진 것이 키다.
Key
: 테이블에서 튜플들을 고유하게 구별할 수 있는 애트리뷰트의 집합.
Super key
: 슈퍼키. 키의 역할을 하는 모든 애트리뷰트가 해당. 튜플들을 고유하게 구별하는데에 불필요한 애트리뷰트도 슈퍼키가 된다.
candidate key
: 후보키. 키가 될 수 있는 애트리뷰트가 해당. 다만 최소한의 애트리뷰트들이어야 함. minimum이 슈퍼키와의 차이점.
Alternate key
: 대체키. 후보키 중 기본키가 아닌 것.
Primary key
: 기본키. 한 테이블에서 후보키 중 선택된 키.
Foreign key
: 외래키. 기본키를 참조하는 애트리뷰트.
EMPLOYEE table: referring table
DEPARTMENT table: referred table
referring table에서 특정 애트리뷰트가 외래키가 되기 위해서는 그 애트리뷰트가 referred table에서는 key 역할을 해야한다. 튜플들을 고유하게 구별하는 역할을 해야한다.
(같은 테이블에서 외래키가 기본키를 참조하는 경우)
foreign key 값은 primary key 값과 같거나 NULL값이다.
Q. foreign key, primary key의 도메인에 대해서
DNO(foreign key)에서 가질 수 있는 값은 DEPTNO(primary key)와 [같다/다르다].
- 다를 수 있다.
- 외래키에서는 널 값이 가능한 경우를 생각해볼 수 있을 것이다.
- 회사에 입사한 사람이 아직 부서 배정을 안 받은 경우 DNO는 NULL이 들어갈 수가 있겠다. 그러나 부서 테이블에서 부서 넘버에 NULL이 있으면 될까?
Composite key
: 복합키. 기본키 수행에 대한 column을 여러개로 지정하는 것.
Course를 보면, 학번과 과목 번호를 결합해 학점을 고유하게 구별하는 테이블을 만들었다. 학번과 과목 번호 모두 primary key이고 이 둘을 결합해 GRADE에 대한 key 역할을 생성했다. 학번과 과목 번호가 합쳐지는 경우 중복되는 경우는? 없다.
무결성 제한 조건
Domain constraint
Key constraint
Entity integrity constraint
Referntial integrity constraint
Q. Referred table에 튜플을 삽입하려고 할 때, 어떤 제한 조건을 위배할 수 있나.
- 도메인 제한: 원자값을 넣지 않으면?
- 키 제한: 키 값이 1~4값이 들어간다면?
- 엔티티 무결성 제한: 삽입하려는 튜플의 primary key 값이 NULL이라면?
참조 무결성 제한: foreign key 값에 대한 제한 조건이므로 위 그림에는 해당 없음. 다만 FLOOR 애트리뷰트가 다른 릴레이션의 외래키라면 이야기는 달라질 수 있다.
Q. Referring tabl에 튜플을 삽입하려고 할 때, 어떤 제한 조건을 위배할 수 있나.
- 참조 무결성 제한 조건: DNO가 5인 튜플을 넣는다면?
Q. Referred table의 튜플을 삭제할 때, 어떤 제한 조건을 위배할 수 있나.
- 참조 무결성 제한 조건: 4번 부서를 없앤다면 문제가 생길까? 문제가 생길 수도 있고, 없을 수도 있다. 참조 무결성 제한 조건에 반드시 걸리는 것은 아니다.(1~3번을 지우면, 데이터베이스 일관성이 깨진다. 3번 부서를 지운다고 가정할 때, 3번 부서와 연결된 직원들의 DNO를 널값으로 바꾸거나 타 부서로 이동시켜야 할 것이다.).
DB의 값을 수정/삭제할 때, 해당 값을 참조하고 있는 테이블(릴레이션)들을 종속적으로 수정/삭제를 가능해주는 옵션
Q. Referring table의 튜플을 삭제할 때, 어떤 제한 조건을 위배할 수 있나.
- 도메인 제한 조건: 하나의 테이블에서 외래키가 기본키를 참조하고 있는 경우 위배할 수 있다. (S.LEE를 해고한 경우, 생각해보자)
DB 수정의 경우 쉽게 튜플을 삭제한 후 다시 삽입한다고 생각을 하자. 위에서 다룬 제약 조건들에 대해 합집합으로 노출된다.