- 관계형 데이터베이스는 데이터를 테이블 형식으로 저장한다. 각 테이블은 행(Tuple, Record)과 열(Attribute, Field)로 구성된다.
정의: 그 속성(Attribute)가 가질 수 있는 값의 범위를 의미한다.
Ex. 학년 속성의 도메인은 1 ~ 4까지의 정수만 올 수 있다.
Ex. 전화번호가 (010) 1234-5678 로 저장될 때, 이를 (지역번호) 번호로 나누지 않고 하나의 전체 값으로 저장해야 한다.
Ex. 학생의 전화번호가 아직 등록되지 않은 경우, 해당 필드는 Null값이 될 수 있다.
instructor(ID, name, dept_name, salary)는 instructor라는 테이블의 스키마를 정의한 것이다.

키(key)는 데이터베이스에서 조건을 만족하는 특정 튜플을 찾거나 다른 튜플들과 구별할 수 있는 유일한 기준이 되는 Attribute(속성)이다.
* 테이블 내에서 튜플을 고유하게 식별할 수 있는 하나 이상의 속성들의 집합.
Ex. 학생 테이블에서 ID, ID + 이름, ID + 전화번호 등 여러 조합이 슈퍼키가 될 수 있다.
- 특징: 중복을 허용하지 않으며, 모든 튜플을 유일하게 식별할 수 있다.
ID가 유일하고 중복되지 않는다면 후보키가 될 수 있다.
학생 테이블에서 ID가 기본키로 설정될 수 있다.

ID가 기본키로 설정되면, 학번이 대체키가 될 수 있다.
수강 테이블에서 학생_ID는 학생 테이블의 기본키 ID를 참조한다.
* 두 개 이상의 속성을 조합하여 고유성을 보장하는 키
강의 테이블에서 강의코드 + 학기 조합이 복합키가 될 수 있다.
- 특징: 개별 속성으로는 고유성을 보장할 순 없지만, 이를 조합하여 고유성을 만들 수 있다.
Ex. A와B가 같고 D가 5이상인 행만 선택.
Ex. A,C만 추출.
Ex. 테이블 R과 S를 Union시킴.
- 두 Table의 Attribute의 개수가 같아야 하며, 의미 또한 같아야 한다. (Union Compatibility)
테이블 R에서 S를 뺌
테이블 R과 S에 공통으로 존재하는 행을 반환
테이블 R과 S를 카티션 곱
Cartesian Product (×) - 카티션 곱 연산 Naming Issue
Cartesian Product 수행 후, 테이블 r과 s 모두 A라는 동일한 속성(열)을 가지고 있을 때, 어떤 테이블의 A인지 구별하기 위해 r.A s.A로 속성을 구분.
테이블 R을 s라는 이름으로 변경하여 반환하는 연산
테이블 r과 테이블 s의 공통속성 A를 기준으로 묶어 r.A = s.A라면, 각 테이블 튜플끼리 결합하여 새로운 테이블을 만듬.
연산 식으로 표현하면 다음과 같다.
- r × s: 테이블 r과 s의 카티션 곱을 수행하여 모든 가능한 튜플 조합을 생성.
- σ_{r.A=s.A}: 생성된 조합 중에서 r.A와 s.A의 값이 같은 튜플만 선택.
- Π_{A,B,D,E}: 선택된 튜플에서 필요한 속성(A, B, D, E)만을 남겨 최종 결과 테이블을 생성.
연산식은 다음과 같다.
r과 s는 각각 두 개의 테이블이며, θ는 조인 조건을 의미한다.
조인 조건 θ는 두 테이블의 속성 간의 관계를 정의하며, 조건이 맞는 튜플들만 결합한다.
조건 자동 설정: 공통 속성(열)들을 기준으로 자동으로 조인 조건이 설정된다.
즉, 동일한 이름의 속성을 가진 두 테이블의 값이 동일한 경우에만 튜플이 결합.
사용자 정의 조건 불가능: Natural Join에서는 특정 조건을 직접 설정할 수 없다.
속성 중복 제거: 조인 후 중복된 공통 속성은 하나로 묶인다.
조건 수동 설정: 사용자가 지정한 임의의 조건(예: =, <, >, != 등)에 따라 두 테이블을 결합한다.
다양한 조건 사용 가능: 두 테이블 간의 속성 비교 조건을 자유롭게 설정할 수 있다.
속성 중복 허용: Theta Join은 단순히 조건에 맞는 튜플을 결합하기 때문에, 결과에서 중복된 속성이 그대로 유지가 된다.