🍏 관계 데이터 모델
사용자는 원하는 데이터(what)만 명시하고, 어떻게 이 데이터를 찾을 것인가(how)는 명시할 필요가 없음
장점
- 간단한 테이블(릴레이션) 사용 / 복잡한 구조 X
- 집합 위주로 데이터 처리
- 효율적인 질의 처리
- 새로운 사용자가 쉽게 이해할 수 있다.
✅ 기본적인 용어
- 릴레이션(relation) : 2차원 테이블
- 레코드(record) : 릴레이션의 각 행
- 투플(tuple) : 레코드를 공식적으로 부르는 용어
- 애트리뷰트(attribute) : 릴레이션에서 이름을 가진 하나의 열

✅ 도메인(domain)
- 한 애트리뷰트에 나타날 수 있는 값들의 집합
- 동일한 도메인이 여러 애트리뷰트에서 사용될 수 있다

✅ 차수(degree)와 카디날리티(cardinality)
- 차수 : 한 릴레이션에 들어 있는 애트리뷰트들의 수
유효한 릴레이션의 최소 차수는 1
- 카디날리티 : 릴레이션의 튜플(행) 수
유효한 릴레이션은 카디날리티 0을 가질 수 있음
시간에 따라 계속 변한다
🍏 릴레이션(relation)
- 릴레이션 스키마
- 내포 (intension)
- 하나 이상의 릴레이션 스키마들로 이루어짐
- 릴레이션의 이름과 릴레이션의 애트리뷰트들의 집합
- 릴레이션 인스턴스
- 외연(extension)
- 릴레이션에 어느 시점에 들어 있는 투플들의 집합

✅ 릴레이션 - 특성
- 각 릴레이션은 오직 하나의 레코드 타입만 포함
- 애트리뷰트 순서가 달라도 동일한 릴레이션

- 동일한 튜플이 두개 이상 존재하지 않는다
- 한 투플의 각 애트리뷰트는 원자값을 가진다.

- 각 애트리뷰트의 이름은 한 릴레이션 내에서만 고유
✅ 릴레이션 - Key
= 각 튜플을 고유하게 식별할 수 있는 하나 이상의 애트리뷰트들의 모임
- 수퍼 키(superkey)
- 후보 키(candidate key)
- 기본 키(primary key)
- 대체 키(alternate key)
- 외래 키(foreign key)

✅ 슈퍼 키 (super key)
- 한 릴레이션 내의 특정 투플을 고유하게 식별하는 하나의 애트리뷰트 또는 애트리뷰트들의 집합
✅ 후보 키 (candidate key)
- 각 투플을 고유하게 식별하는 최소한의 애트리뷰트들의 모임
- 후보 키가 두개 이상의 애트리뷰트를 가지면 복합키(composite key)라 부른다.
- 아래 예시에서 (학번,과목번호)가 후보키이다.

✅ 기본 키 (primary key)
- 릴레이션에 후보 키가 두 개 이상 있으면 설계자 또는 데이터베이스 관리자가 이들 중에서 하나를 기본 키로 선정
✅ 대체 키 (alternate key)
✅ 외래 키 (foreign key)
- 어떤 릴레이션의 기본 키를 참조하는 애트리뷰트
- 다른 릴레이션의 기본 키를 참조하는 외래 키

- 자체 릴레이션의 기본 키를 참조하는 외래 키

- 기본 키의 구성요소가 되는 외래 키

🍏 무결성 제약 조건
✅ 데이터 무결성(data integrity)
- 데이터의 정확성, 유효성
- 일관된 데이터베이스 상태를 정의하는 규칙들을 묵시적으로 또는 명시적으로 정의
✅ 도메인 제약조건(domain constraint)
- 각 애트리뷰트 값이 반드시 원자값
- 애트리뷰트 값의 디폴트 값, 가능한 값들의 범위 등을 지정할 수 있다.

✅ 키 제약조건(key constraint)
- key attribute에 중복값이 존재하면 안된다.
✅ 기본 키와 엔티티 무결성 제약조건
= entity integrity constraint)
- 릴레이션의 기본키를 구성하는 어떤 애트리뷰트도 널값을 가질 수 없다
- 대체 키에는 적용 X
- 사용자는 릴레이션을 생성하는 데이터 정의문에서 어떤 애트리뷰트가 릴레이션의 기본 키의 구성요소인가를 DBMS에게 알려준다.
✅ 외래 키와 참조 무결성 제약조건
= referential integrity constraint
- 릴레이션의 연관된 투플들 사이의 일관성을 유지하는데 사용


✅ 갱신 연산 & 무결성 제약 조건
삽입
- 제약조건을 위배하는 삽입 연산은 DBMS가 거절함으로써 무결성 유지
삭제
- 참조하는 릴레이션에서 튜플 삭제 -> 모든 조건 위배 X
- 참조되는 릴레이션에서 튜플 삭제 -> 참조 무결성을 위배할 가능성 O
수정
- DBMS는 수정하는 애트리뷰트가 기본 키인지 외래 키인지 검사
- 기본키X, 외래키X -> 위배 X
- 기본키, 외래키를 수정할 때는 삭제와 같은 문제를 가짐. 그래서 아래의 옵션들을 이용해야 한다.
✅ DBMS의 옵션
참조 무결성 제약조건을 만족시키기 위해서 DBMS가 제공하는 옵션
1. 제한(restriced)
2. 연쇄(cascade)
- 튜플을 삭제할 때 참조하는 릴레이션쪽에도 연관된 애들을 함께 삭제

3. 널값(nullify)
4. 디폴트 값
✅ 수정
- 수정하려는 애트리뷰트가 기본키인지 외래 키인지 검사
- 둘다 아니면 수정 연산이 무결성 제약 조건 위배 X
- 기본키/외래키 수정 : 튜플 삭제 + new 튜플 삽입
- 오라클에서는 제학적으로 참조 무결성 제약 조건 유지