관계 데이터 모델
01. 관계 데이터 모델
* 릴레이션(relation) : 행과 열로 구성된 테이블. (관계라고 해석하여 부르지 않는다. relationship을 관계라고 부르기 때문.)
* 관계(relationship) : 릴레이션 내에서 생성되는 관계 또는 릴레이션 간에 생성되는 관계.
*스키마(schema) : 관계 데이터베이스의 릴레이션이 어떻게 구성되는지 어떤 정보를 담고 있는지에 대한 기본적인 구조를 정의함. 테이블에서는 첫 행(헤더)에 나타남. 각 데이터의 특징을 나타내는 속성, 자료 타입 등의 정보를 담고 있음.
* 인스턴스(instance) : 테이블에 실제로 저장되는 데이터의 집합.
* 속성(attribute) : 릴레이션 스키마의 열. 가로.
* 도메인(domain) : 속성이 가질 수 있는 값의 집합.
* 차수(degree) : 속성의 개수.
* 투플(tuple) : 릴레이션의 행. 세로.
* 카디날리티(cardinality) : 투플의 수.
<릴레이션의 특징>
1. 속성은 단일 값을 가진다.
2. 속성은 서로 다른 이름을 가진다.
3. 한 속성의 값은 모두 같은 도메인 값을 가진다.
4. 속성의 순서는 상관없다.
5. 릴레이션 내의 중복된 투플은 허용하지 않는다.
6. 투플의 순서는 상관없다.
02. 무결성 제약조건
* 키(key) : 특정 투플을 식별할 때 사용하는 속성 혹은 속성의 집합.
* 슈퍼키(super key) : 투플을 유일하게 식별할 수 있는 하나의 속성 혹은 속성의 집합.
(예 : 이름은 동명이인이 있을 경우 투플을 유일하게 식별해내지 못하므로 슈퍼키가 되지 못함.
하지만 [이름, 주민번호]로 한다면 가능.)
* 후보키(candidate key) : 투플을 유일하게 식별할 수 있는 속성의 최소 집합. (즉, 슈퍼키만 모아놓은 것)
* 기본키(primary key) : 여러 후보키 중 하나를 선정하여 대표로 삼는 키. 밑줄을 그어 표시함.
→ 기본키 제약조건
1. 릴레이션 내 투플을 식별할 수 있는 고유한 값을 가져야 한다.
2. NULL값은 허용하지 않는다.
3. 키 값의 변동이 일어나지 않아야 한다.
4. 최대한 적은 수의 속성을 가진 것이여야 한다.
5. 향후 키를 사용하는 데 있어서 문제 발생의 소지가 없어야 한다.
* 대리키(artificial key) : 기본키가 보안을 요하거나, 여러 개의 속성으로 구성되어 복잡하거나, 마땅한 기본키가 없을 때 가상의 속성을 만들어 기본키로 삼는 것. 대리키는 임의로 생성하는 값으로, 사용자가 그 의미를 직관적으로 알 수 없음.
*대체키 (alternate key) : 기본키로 선정되지 않은 후보키
* 외래키 (FK. foreign key) : 다른 릴레이션의 기본키를 참조하는 속성. 다른 릴레이션의 기본키를 참조하여 관계 데이터 모델의 특징인 릴레이션 간의 관계를 표현함.
→ 외래키 제약조건
1. 관계 데이터 모델의 릴레이션 간의 관계를 표현한다.
2. 다른 릴레이션의 기본키를 참조하는 속성이다.
3. 참조하고(외래키) 참조되는(기본키) 양쪽 릴레이션의 도메인은 서로 같아야 한다.
4. 참조되는(기본키) 값이 변경되면 참조하는 (외래키) 값도 변경된다.
5. NULL 값과 중복 값 등이 허용된다.
6. 자기 자신의 기본키를 참조하는 외래키도 가능하다.
7. 외래키가 기본키의 일부가 될 수 있다.
- 도메인 무결성 제약조건 (도메인 제약) : 릴레이션 내의 투플들이 각 속성의 도메인에 지정된 값만을 가져야 한다.
- 개체 무결성 제약조건 (기본키 제약) : 릴레이션은 기본키를 지정하고 그에 따른 무결성 원칙 즉, 기본키는 NULL값을 가져서는 안되며 릴레이션 내에 오직 하나의 값만 존재하야 한다는 조건.
- 참조 무결성 제약조건 (외래키 제약) : 릴레이션 간의 참조 관계를 선언하는 제약 조건. 자식 릴레이션의 외래키는 부모 릴레이션의 기본키와 도메인이 동일해야 하며, 자식 릴레이션의 값이 변경될 때 부모 릴레이션의 제약을 받는다는 것이다.
03. 관계대수
* 순수 관계 연산 : 셀렉션, 프로젝션, 조인, 디비전, 개명
* 일반 집합 연산 : 합집합, 차집합, 교집합, 카디전 프로덕트
1. 셀렉션(selection) : 릴레이션의 투플을 추출하기 위한 연산.
▶ <속성>=<상수값 또는 속성>
σ<조건>(릴레이션)
마당서점에 판매하는 도서 중 8,00원 이하인 도서 => σ가격<=8000(도서)
+) 조건이 여러 개라면 ∧(and) ∨(or) ¬(not)을 사용해서 표현한다.
가격이 8,000원 이하이고 도서번호가 3이상인 도서 => σ가격<=8,000∧도서번호>=3(도서)
2. 프로젝션 (projection) : 릴레이션의 속성을 추출하기 위한 연산.
▶ π<조건>(릴레이션)
신간도서 안내를 위해 (이름, 주소, 핸드폰)의 카탈로그 주소록을 만드시오. => π이름, 주소, 핸드폰(고객)
3. 합집합 : 두 개의 릴레이션을 합하여 하나의 릴레이션을 반환한다. (중복은 삭제)
▶
릴레이션1
∪ 릴레이션2
4. 교집합 : 두 릴레이션이 공통으로 가지고 있는 투플을 반환한다.
▶ 릴레이션1 ∩ 릴레이션2
5. 차집합 : 첫 번째 릴레이션에는 속하고 두 번째 릴레이션에는 속하지 않는 투플을 반환한다.
▶ 릴레이션1 ㅡ 릴레이션2
6. 카티전 프로덕트 : 두 릴레이션을 연결시켜 하나로 합친다.
▶ 릴레이션1 × 릴레이션2
7. 조인 ⋈ : 두 릴레이션의 공통 속성을 기분으로 속성 값이 같은 투플을 수평으로 결합하는 연산이다. 즉, 두 릴레이션을 카티전 프로덕트 연산을 한 후 셀렉션 연산을 한 것으로 정의할 수 있다. 이때 셀렉션 연산의 <조건>은 속성 값이 같은지 비교하는 식이다.
7.1 세타 조인 ⋈θ : 조인에 참여하는 두 릴레이션의 속성 값을 비교하여 조건을 만족하는 투플만 반환한다.
▶ 릴레이션1 ⋈ ((릴레이션1 속성) 조건 (릴레이션2 속성)) 릴레이션2
7.2 동등 조인 ⋈ : 세타조인에서 = 조건으로 연산자를 사용한 조인이다.(보통 조인 연산 = 동등조인으로 생각한다. )
▶ 릴레이션1 ⋈ ((릴레이션1 속성) = (릴레이션2 속성)) 릴레이션2
7.3 자연 조인 ⋈N : 동등조인에서 조인에 참여한 속성이 두 번 나오지 않도록 두 번째 속성을 제거한 결과를 반환한다.
▶ 릴레이션1 ⋈ N((릴레이션1 속성)),(릴레이션2 속성))릴레이션2
7.4 외부 조인 ⋈N : 자연조인의 확장된 형태로, 자연조인 시 조인에 실패한 투플을 모두 보여주되 값이 없는 대응 속성에는 NULL값을 채워서 반환한다. (아래의 왼쪽, 오른쪽, 완전은 기준 릴레이션의 위치를 따라 나뉜다.)
▶ 왼쪽 외부조인 ⟕ => 릴레이션1⟕((릴레이션1 속성) , (릴레이션2 속성)) 릴레이션2
오른쪽 외부조인 ⟖ => 릴레이션1⟖((릴레이션1 속성) , (릴레이션2 속성)) 릴레이션2
완전 외부조인 ⟗ => 릴레이션1⟗((릴레이션1 속성) , (릴레이션2 속성)) 릴레이션2
7.5 세미조인 ⋉ : 자연조인을 한 후 두 릴레이션 중 한 쪽 릴레이션의 결과만 반환한다. 세미조인은 기호에서 닫힌 쪽 릴레이션의 투플만 반환한다.
▶ 릴레이션1 ⋉ N((릴레이션1 속성)),(릴레이션2 속성))릴레이션2
8. 디비전 ÷ : 특정 값들을 모두 갖고 있는 투플을 찾을 때 사용한다. 릴레이션2의 모든 값을 포함하는 릴레이션1의 튜플을 추출한다.
▶ 릴레이션1 ÷ 릴레이션2