릴레이션 : 행/열로 구성된 테이블
하나의 개체에 관한 데이터를 하나의 릴레이션에 저장

관계
릴레이션 내의 관계 : 릴레이션 안의 데이터들의 집합
릴레이션 간의 관계 : 릴레이션을 식별 가능한 값을 이용해 표현
릴레이션 스키마 : 릴레이션의 논리적 구조
릴레이션 인스턴스 : 릴레이션 스키마에 실제로 저장된 데이터 집합
데이터를 릴레이션으로 표현 -> 릴레이션에 대한 제약조건과 관계 연산을 위한 관계 대수를 정의
릴레이션에서 특정 튜플들을 유일하게 구별하는 속성
슈퍼키
유일성을 만족하는 속성 또는 속성들의 집합
후보키
유일성, 최소성을 만족하는 속성 또는 속성들의 최소 집합
슈퍼키 중에서 불필요한 속성을 제거한 최소 키
기본키
후보키 중에서 기본적으로 사용하기 위해 선택한 키
NULL 허용 X
밑줄 그어 표시
대체키
기본키로 선택되지 못한 후보 키
대리키
기본키가 보안을 필요로 하거나 / 여러 개의 속성으로 구성되어 복잡하거나 / 마땅한 기본키가 없을 때 -> 일련번호 같은 가상의 속성을 만들어 기본키로 삼음 = 대리키
외래키
다른 릴레이션의 기본키를 참조하는 속성 또는 속성들의 집합
NULL 가능, 중복값 가능
참조하는 릴레이션 = 외래키 가짐 = 자식 릴레이션
참조되는 릴레이션 = 기본키 가짐 = 부모 릴레이션
외래키와 기본키 속성의 이름은 달라도 되지만 도메인은 같아야 함
자기 자신의 기본키 참조하는 외래키도 가능
외래키는 기본키의 일부가 될 수 있음

ex 1)

슈퍼키 : 고객아이디 / (고객아이디, 고객이름) / (고객아이디, 나이, 등급) ...
후보키 : 고객아이디 / (고객아이디, 고객이름) ... => 고객아이디는 유일한 속성이므로, 이름과 나이는 사실상 불필요한 속성, 그러나 후보키 조건은 충족
기본키 : 고객아이디
대체키 : (고객아이디, 고객이름) / (고객아이디, 나이) ...
대리키 : 고객아이디 -> 고객번호
// 구분하는거 가끔 헷갈린다,, 속성의 '집합'도 포함된다는 점 기억하고 기본키는 확실히 알아두기
ex 2)

릴레이션 R :
A -> {a1, a2, a3, a4} : 모두 다름 => 후보키 가능
B -> {b1, b1, b1, b2} : 중복있음
C -> {c1, c1, c2, c3} : 중복있음
(B, C) : 여전히 중복 존재
= > 후보키 A, 기본키 A
릴레이션 S :
C -> {c1, c1, c2, c3} : 중복있음
D -> {d2, d1, d3, d3} : 중복있음
E -> {e1, e2, e3, e3} : 중복있음
(C, D) -> (c1, d2), (c1, d1), (c2, d3), (c3, d3) : 모두 다름 => 후보키 가능
(C, E) -> (c1, e1), (c1, e2), (c2, e3), (c3, e3) : 모두 다름 => 후보키 가능
(D, E) -> (d3, e3) 중복됨
=> 후보키 (C, D), (C, E) / 기본키는 후보키들 중 하나
일관성과 정확성을 바탕으로 구축된 데이터베이스가 계속해서 무결성을 유지하려면 튜플의 삽입, 삭제, 수정 시 데이터의 제약조건 준수 여부를 확인해야함
참조 중인 부모 키 삭제 / 변경
존재하지 않는 부모 키 참조
외래키 속성이 NULL 값을 가진다고 해서 이 제약조건 위반은 아님
자식 릴레이션에 삽입할 때 : 도메인 무결성 제약조건 먼저 확인 후 개체 무결성 제약조건에 위배되는 값 없는지 확인
부모 릴레이션에서 삭제할 때 : 삭제 요청 -> 참조 확인 -> 옵션 선택
RESTRICTED : 자식 릴레이션에서 참조하고 있을 때 삭제 작업 거부
CASCADE : 자식 릴레이션의 관련 튜플 같이 삭제
DEFAULT : 자식 릴레이션의 관련 튜플을 미리 설정해둔 값으로 변경
NULL : 자식 릴레이션의 관련 튜플을 NULL 값으로 설정
1) 학생 릴레이션에 (601, 박세리, 3001) 추가
학과 릴레이션에 3001 없음 -> 거부
2) 학과 릴레이션에서 (2001, 체육학과) 삭제
학생 릴레이션에서 2001을 참조하는 튜플 존재 -> 거부
릴레이션 처리 과정을 기술하는 언어
하나 이상의 릴레이션에 연산을 수행하여 결과 릴레이션이 나오기까지의 절차를 확인하는 방법을 제공
기본 연산자 5개 : 셀렉션 / 프로젝션 / 합집합 / 차집합 / 카티션 프로덕트
일반 집합 연산자
순수 관계 연산자

조인
두 릴레이션의 공통 속성을 기준으로 속성값이 같은 튜플을 수평 결합
릴레이션1 ⋈ 릴레이션2
세타 조인 중 비교 연산자가 = 인 경우
어느 릴레이션 소속인지 구분하기 위해 . 사용 -> 릴레이션.속성이름
=를 사용하기 때문에 두 릴레이션의 공통 속성이 모두 결과에 나타남
비교 연산자를 자유롭게 사용
동등조건에서 중복되는 조인 칼럼 하나를 제거해서 더 깔끔하게 보여줌
자연조인 연산을 확장된 관계 대수 연산자
릴레이션에 없는 값은 NULL로 처리
왼쪽 외부 조인 : R에 존재하는 모든 튜플을 결과에 반영
오른쪽 외부 조인 : S에 존재하는 모든 튜플을 결과에 반영
완전 외부 조인 : 양쪽에 존재하는 모든 튜플을 결과에 반영
자연조인을 한 후 두 릴레이션 중 한쪽 릴레이션의 결과만 반환
릴레이션2 연결 고리가 될 조인 속성만 먼저 뽑아낸 후 릴레이션1과 자연조인하여 합침
불필요한 속성 미리 제거 -> 연산 비용 줄일 수 있음
교환 법칙 성립 X
릴레이션1 ⋉ 릴레이션2
조인을 사용한 후 릴레이션2의 모든 튜플과 관련 있는 릴레이션1의 튜플을 추출 (단, 릴레이션1이 릴레이션2의 모든 속성을 포함해야함)
릴레이션1 ÷ 릴레이션2