1. 관계 데이터 모델의 개념
1-1. 릴레이션의 개념
- 관계 데이터 모델의 기본 개념
- 개념적 구조를 논리적 구조로 표현하는 논리적 데이터 모델
- 하나의 개체에 관한 데이터를 하나의 릴레이션에 저장
- 관계(relation)
- 릴레이션 내의 관계: 릴레이션 안에 있는 데이터들의 집합으로 표현
- 릴레이션 간의 관계: 릴레이션을 식별 가능한 값을 이용해 표현

- 릴레이션(relation)
- 행과 열로 구성된 테이블
- 하나의 개체에 관한 데이터를 2차원 테이블 구조로 저장한 것
- 파일 관리 시스템 관점에서 파일(file)에 대응
- 스키마와 인스턴스로 이루어짐
- 속성(attribute)
- 릴레이션의 열, 애트리뷰트
- 파일 관리 시스템 관점에서 필드(field)에 대응
- 튜플(tuple)
- 릴레이션의 행
- 파일 관리 시스템 관점에서 레코드(record)에 대응
1-2. 릴레이션 스키마와 인스턴스

- 릴레이션 스키마
- 릴레이션의 논리적 구조
- 릴레이션의 이름과 릴레이션에 포함된 모든 속성의 이름으로 정의
- 속성(attribute): 릴레이션 스키마의 열
- 도메인(domain): 속성이 가질 수 있는 값의 집합
- 차수(degree): 속성의 개수
- 특징(정적): 자주 변하지 않음
- 표기 방법 2가지
1) 릴레이션 이름(속성1, 속성2, 속성3, …)
도서(도서번호, 도서이름, 출판사, 가격)
2) 릴레이션 이름(속성1: 도메인1, 속성2: 도메인2, 속성3: 도메인3, …)
도서(도서번호: integer, 도서이름: char(40), 출판사: char(40), 가격: integer)
- 릴레이션 인스턴스
- 릴레이션 스키마에 실제로 저장된 데이터 집합
- 튜플(tuple): 릴레이션의 행
- 카디날리티(cardinality): 튜플의 수
- 특징(동적): 삽입, 추가, 삭제, 수정이 자주 발생
릴레이션 구조와 관련된 용어 정리
| 릴레이션 용어 | 같은 의미로 통용되는 용어 | 파일 시스템 용어 |
|---|
| 릴레이션(relation) | 테이블(table) | 파일(file) |
| 스키마(schema) | 내포(intension) | 헤더(header) |
| 인스턴스(instance) | 외연(extension) | 데이터(data) |
| 튜플(tuple) | 행(row) | 레코드(record) |
| 속성(attribute) | 열(column) | 필드(field) |
1-3. 릴레이션의 특징
- 속성의 원자성
- 속성은 원자성(단일값)만을 가진다
예) 이름 속성: “짱구”(O) / “짱구, 짱아, 흰둥이”(X)
- 여러 값을 넣고 싶으면 테이블을 분리하거나 속성을 나눈다
- 속성의 무순서성
- 하나의 릴레이션에서 속성 사이의 순서는 무의미하다
- 속성의 동일성
- 각 속성의 정의된 도메인에 속하는 동일한 유형의 값만 가진다
- 튜플의 유일성
- 하나의 릴레이션에는 동일한 튜플이 존재할 수 없다
- 튜플의 무순서성
- 하나의 릴레이션에서 튜플 사이의 순서는 무의미하다
1-4. 관계 데이터 모델
- 데이터를 2차원 테이블 형태인 릴레이션으로 표현
- 릴레이션에 대한 제약조건과 관계 연산을 위한 관계대수를 정의
- 관계 데이터베이스 시스템
- 관계 데이터 모델을 컴퓨터 시스템에 구현한 것
- 관계 데이터 모델에 기초하여 SQL을 기반으로 구현

2. 무결성 제약조건
2-1. 키
키
- 릴레이션에서 특정 튜플들을 유일하게 구별하는 속성 또는 속성들의 집합
- 키가 되는 속성(집합)은 반드시 값이 달라서 튜플들을 서로 구별할 수 있어야 함
- 특성
- 유일성(uniqueness) : 하나의 릴레이션에서 모든 튜플은 서로 다른 키 값을 가져야 함
- 최소성(minimality): 꼭 필요한 최소한의 속성들로만 키를 구성함
키의 종류
| 고객아이디 | 고객이름 | 나이 | 등급 | 직업 | 적립금 | 주소 |
|---|
| apple | 김현준 | 20 | gold | 학생 | 1000 | 서울시 구로구 고척로 27 |
| banana | 정소화 | 25 | vip | 간호사 | 2500 | 부천시 원미구 석천로 58 |
| carrot | 원유선 | 28 | gold | 교사 | 4500 | 서울시 영등포구 대림로 73 |
| orange | 정지영 | 22 | silver | 학생 | 0 | 서울시 마포구 토정로 56 |
- 슈퍼키(super key)
- 유일성을 만족하는 속성 또는 속성들의 집합
- 예) 고객 릴레이션의 슈퍼키: 고객아이디, (고객아이디, 고객이름), (고객아이디, 나이, 등급), (고객아이디, 나이, 등급, 직업) 등
- 후보키(candidate key)
- 유일성과 최소성을 만족하는 속성 또는 속성들의 최소 집합
- 슈퍼키 중에서 불필요한 속성을 제거한 최소 키
- 예) 고객 릴레이션의 후보키: 고객아이디, (고객아이디, 고객이름), (고객아이디, 나이), (고객아이디, 주소) 등
- 고객아이디가 유일하므로 이름, 나이는 불필요한 속성이나 후보키 조건은 충족
- (나이, 등급)은 동명이인이 있다면 신뢰도가 낮으므로 불가
- 기본키(primary key)
- 밑줄을 그어 표시
- 후보키 중에서 기본적으로 사용하기 위해 선택한 키
- NULL 허용X
- 예) 고객 릴레이션의 기본키: 고객아이디
- 대체키(alternate key)
- 기본키로 선택되지 못한 후보키
- 예) 고객 릴레이션의 대체키: (고객아이디, 고객이름), (고객아이디, 나이), (고객이름, 주소) 등
- 대리키(surrogate key, artificial key)
- 기본키가 보안을 필요로 하거나 여러 개의 속성으로 구성되어 복잡하거나, 마땅한 기본키가 없을 때, 일련번호 같은 가상의 속성을 만들어 기본키로 삼는다.
- DBMS나 관련 소프트웨어가 임의로 생성
- 외래키(foreign key)
- 다른 릴레이션의 기본키를 참조하는 속성 또는 속성들의 집합
- NULL 가능
- 릴레이션들 사이의 관계를 표현
- 참조하는 릴레이션(자식): 외래키를 가진 릴레이션
- 참조되는 릴레이션(부모): 외래키가 참조하는 기본키를 가진 릴레이션

- 외래키 속성과 그것이 참조하는 기본키 속성의 이름은 달라도 되지만 도메인은 같아야 한다
- 참조되는 기본키 값이 변경되면 참조하는 외래키 값도 변경된다
- NULL 값과 중복값 등이 허용된다
- 외래키는 기본키의 일부가 될 수 있다

- 같은 릴레이션의 기본키를 참조하는 외래키도 정의할 수 있다
- 외래키 속성은 NULL 값을 가질 수도 있다
키의 특성과 종류

| 특성 |
• 유일성: 한 릴레이션에서 모든 튜플은 서로 다른 키 값을 가져야 함
• 최소성: 꼭 필요한 최소한의 속성들로만 키를 구성
|
| 종류 |
• 슈퍼키: 유일성을 만족하는 속성 또는 속성들의 집합
• 후보키: 유일성과 최소성을 만족하는 속성 또는 속성들의 집합
• 기본키: 후보키 중에서 기본적으로 사용하기 위해 선택한 키
• 대체키: 기본키로 선택되지 못한 후보키
• 외래키: 다른 릴레이션의 기본키를 참조하는 속성 또는 속성들의 집합
• 대리키: 인위적으로 만든 기본키
|
2-2. 무결성 제약조건
- 무결성
- 데이터에 결함이 없는 상태
- 데이터가 정확하고 유효하게 유지된 상태
- 데이터의 무결성(data integrity)
- 데이터의 무결성을 보장하고 일관되고 정확한 상태로 유지하기 위한 규칙
- 일관성과 정확성을 바탕으로 구축된 데이터베이스가 계속해서 무결성을 유지하려면 튜플의 삽입, 삭제, 수정 시 데이터의 제약조건 준수 여부를 확인해야 함
- 무결성 제약조건(integrity constraint)
- 도메인 무결성 제약조건(domain integrity constraint)
- 도메인 제약: 릴레이션 내의 튜플들이 각 속성의 도메인에 지정된 값만 가져야 한다는 조건
- 개체 무결성 제약조건(primary key constraint)
- 기본키 제약: “기본키는 NULL값을 가져서는 안되며 릴레이션 내에 오직 하나의 값만 존재해야 함”을 지켜야 한다는 조건
- 참조 무결성 제약조건(referential integrity constraint)
- 외래키 제약: 릴레이션 간의 참조 관계를 선언하는 제약 조건
- 자식 릴레이션의 외래키는 부모 릴레이션의 기본키와 도메인이 같아야 하며, 자식 릴레이션의 값이 변경될 때 부모 릴레이션의 제약을 받는다
- 부모에 없는 값을 자식이 참조하면 위반
2-3. 무결성 제약조건의 수행
개체 무결성
- 개체 무결성 제약 조건 위반 대표 예
- 기본키가 NULL인 경우
- 기본키가 중복된 경우
- 복합키로 만든 기본키의 일부가 NULL일 때
- 기본키를 가진 행 삭제 시 참조하는 외래키가 있을 때

참조 무결성
- 참조 무결성 제약조건 위반의 대표 예
- 참조 중인 부모 키 삭제
- 참조 중인 부모 키 변경
- 존재하지 않는 부모 키 참조
- 부모 릴레이션에서 튜플을 삭제할 때 무결성 제약조건을 수행하기 위한 옵션


- 해결 방법은 DBMS 설정에 따라 다름
- RESTRICT / NO ACTION: 삭제 거부(기본 동작)
- CASCADE: 부모 삭제 시 자식도 함께 삭제
- SET NULL / SET DEFAULT: 부모 삭제 시 자식의 외래키를 NULL 또는 기본값으로 변경
무결성 제약조건의 정리

3. 관계대수
3-1. 관계대수
- 릴레이션에서 원하는 결과를 얻기 위해 릴레이션의 처리 과정을 순서대로 기술하는 절차적 언어로, 하나 이상의 릴레이션에 연산을 수행하여 결과 릴레이션이 나오기까지의 절차를 확인하는 방법을 제공
- 릴레이션을 처리하는 연산자들의 모임
- 기본 연산자 5개: σ, π, U, -, x
- 일반 집합 연산자와 순수 관계 연산자로 분류
- 폐쇄 특성(closure property)
- 피연산자도 릴레이션이고 연산의 결과도 릴레이션

3-2. 집합연산
일반 집합 연산자(set operation)
- 릴레이션이 튜플의 집합이라는 개념을 이용
- 합집합, 교집합, 차집합은 피연산자인 두 릴레이션이 합병 가능해야 함
- 합병 가능(union-compatible) 조건
- 두 릴레이션의 차수가 같아야 함
- 두 릴레이션에서 서로 대응되는 속성의 도메인이 같아야 함
| 연산자 | 기호 | 표현 | 의미 |
|---|
| 합집합 | ∪ | R∪S | 릴레이션 R과 S의 합집합을 반환 |
| 교집합 | ∩ | R∩S | 릴레이션 R과 S의 교집합을 반환 |
| 차집합 | - | R-S | 릴레이션 R과 S의 차집합을 반환 |
| 카티션 프로덕트 | x | RxS | 릴레이션 R의 각 튜플과 릴레이션 S의 각 튜플을 모두 연결하여 만든 새로운 튜플을 반환 |

합집합(union)
- 합병 가능한 두 릴레이션 R과 S의 합집합: R ∪ S
- 릴레이션 R에 속하거나 릴레이션 S에 속하는 모든 튜플을 반환
- 결과 릴레이션의 특성
- 차수는 릴레이션 R과 S의 차수와 같음
- 카디널리티는 릴레이션 R과 S의 카디널리티를 더한 것과 같거나 적어짐
- 교환법칙 성립: R ∪ S = S ∪ R
- 결합 법칙 성립: (R∪S)∪T = R∪(S∪T)

교집합(intersection)
- 합병 가능한 두 릴레이션 R과 S의 교집합: R ∩ S
- 릴레이션 R과 S의 공통으로 속하는 튜플을 반환
- 결과 릴레이션의 특성
- 차수는 릴레이션 R과 S의 차수와 같음
- 카디널리티는 릴레이션 R과 S의 어떤 카디널리티와 같거나 적음
- 교환법칙 성립: R ∩ S = S ∩ R
- 결합 법칙 성립: (R∩S)∩T = R∩(S∩T)

차집합(difference)
- 합병 가능한 두 릴레이션 R과 S의 차집합: R-S
- 릴레이션 R에는 존재하지만 릴레이션 S에는 존재하지 않는 튜플을 반환
- 결과 릴레이션의 특성
- 차수는 릴레이션 R과 S의 차수와 같음
- R-S의 카디널리티는 릴레이션 R의 카디널리티와 같거나 적음
- S-R의 카디널리티는 릴레이션 S의 카디널리티와 같거나 적음
- 교환법칙, 결합법칙 성립하지 않음

카티션 프로덕트(cartesian product)
- 두 릴레이션 R과 S의 카티션 프로덕트: RxS
- 릴레이션 R에 속한 각 튜플과 릴레이션 S에 속한 각 튜플을 모두 연결하여 만들어진 새로운 튜플을 반환
- 결과 릴레이션의 특성
- 차수는 릴레이션 R과 S의 차수를 더한 것과 같음
- 카디널리티는 릴레이션 R과 S의 카디널리티를 곱한 것과 같음
- 교환법칙 성립: RxS = SxR
- 결합법칙 성립: (RxS)xT = Rx(SxT)

3-3. 셀렉션과 프로젝션
순수 관계 연산자(relational operation)
| 연산자 | 기호 | 표현 | 의미 |
|---|
| 셀렉트 | σ | σ조건(R) | 릴레이션 R에서 조건을 만족하는 튜플들을 반환 |
| 프로젝트 | π | π속성리스트(R) | 릴레이션 R에서 주어진 속성들의 값으로만 구성된 튜플들을 반환 |
| 조인 | ⋈ | R ⋈ S | 공통 속성을 이용해 릴레이션 R과 S의 튜플들을 연결하여 만든 새로운 튜플들을 반환 |
| 디비전 | ÷ | R ÷ S | 릴레이션 S의 모든 튜플과 관련이 있는 릴레이션 R의 튜플들을 반환 |

셀렉트(select)
- 릴레이션에서 조건을 만족하는 튜플만 추출하기 위한 연산자
- 수학적 표현: σ<조건식>(R)
- 데이터 언어적 표현:
릴레이션 where 조건식
- 조건식
- 비교식, 프레디킷(predicate)이라고도 함
- 속성과 상수의 비교나 속성들 간의 비교로 표현
- 비교 연산자(>, ≥, <, ≤, =, ≠)와 논리 연산자(∧, ∨, ¬)를 이용해 작성
- 교환법칙 성립
프로젝트(project)
- 릴레이션의 속성을 추출하기 위한 단항 연산자
- 수학적 표현: π<속성리스트>(R)
- 데이터 언어적 표현: 릴레이션[속성리스트]
예) 마당서점의 도서 중 가격이 8,000원 이하인 도서 이름과 출판사를 보이시오.

3-4. 조인
- 두 릴레이션의 공통 속성을 기준으로 속성값이 같은 튜플을 수평으로 결합하는 연산으로 기본 연산자의 조합으로 구현할 수 있는 유도된 연산자
- 표현법: R1 ⋈ R2
- 기본 조인연산과 확장된 조인연산으로 구분
[기본 조인연산]
세타조인(⋈θ)
- 두 릴레이션 간의 속성값을 비교(=, ≠, ≤, ≥, <, >)하여 조건에 맞는 튜플을 반환함
- 양쪽 테이블의 공통 컬럼이 모두 결과에 나타남
- 예) 나이가 25세 이상인 고객이 주문한 사항을 모두 나타내기
고객 ⋈ 고객.고객아이디=주문.고객아이디 ∧ 고객.나이≥25 주문
동등조인(⋈R=S)
- 세타 조인 중에서 비교 연산자가 ‘=’(같다)인 경우로 가장 많이 쓰임
- 양쪽 테이블의 공통 컬럼이 모두 결과에 나타남
- 예) 고객이 주문한 사항을 모두 나타내기
고객 ⋈ 고객.고객아이디=주문.고객아이디 주문
자연조인(⋈N)
- 동등조건에서 중복되는 조인 컬럼을 하나 제거하여 더 깔끔하게 보여주는 조인
- 예) 고객과 고객의 주문사항을 보여주되 같은 속성은 한 번만 표시할 때
고객 ⋈ N고객.고객아이디=주문.고객아이디 주문
[확장된 조인연산]
외부조인
- 자연 조인에서 조인 조건에 맞지 않아 제외되는 튜플도 버리지 않고 NULL을 채워 반환
- 분류
- 왼쪽 외부 조인
- 표현법: R1 ⟕ R2
- 왼쪽에 있는 R1에 존재하는 모든 튜플을 결과 릴레이션에 포함시킴
- 오른쪽 외부 조인
- 표현법: R1 ⟖ R2
- 오른쪽에 있는 R2에 존재하는 모든 튜플을 결과 릴레이션에 포함시킴
- 완전(full) 외부 조인
- 표현법: R1 ⟗ R2
- 양쪽에 존재하는 모든 튜플을 결과 릴레이션에 포함시킴

세미조인
- 자연조인을 한 후 두 릴레이션 중 한 쪽 릴레이션의 결과만 반환함
- 표현법: R1 ⋉ R2
- 동작방식
- R1 ⋉ R2 = R1 ⋈N π조인속성(R2)
- R2를 조인 속성으로 프로젝트 연산한 후, R1에 자연 조인하여 결과 릴레이션을 구성
- 특성
- 불필요한 속성을 미리 제거하여 조인 연산 비용을 줄이는 장점이 있음
- 교환법칙 성립x: R ⋉ S ≠ S ⋉ R
- 예) 주문한 적이 있는 고객의 데이터만 보이기

조인 정리
- 세타/동등/자연조인: 공통 조건 만족하는 행만 반환
- 세타 조인: 일반적인 비교연산자 사용
- 동등 조인: 세타조인 중
= 연산자
- 자연 조인: 중복속성 제거
- 외부 조인: 조건 불만족 시에도 한쪽 테이블 행 포함(NULL 채움)
- 세미 조인: 한쪽 테이블 행만 반환, 다른 테이블 속성은 제외
3-5. 디비전
- 다른 연산과 달리 릴레이션 속성값의 집합으로 연산을 수행함
- R2의 모든 튜플과 관련이 있는 R1의 튜플을 추출하는 연산
- 특정 조건을 모두 충족하는 대상을 찾을 때 사용
- 표현법: R1 ÷ R2
- R1이 R2의 모든 속성을 포함하고 있어야 함
- 곱셈의 역연산과 유사 - ex. 12÷2 = (6x2)÷2 = 6
- 예1) 릴레이션 R과 S에 대한 두 가지 디비전 연산

- 예2) 전공 필수 과목을 모두 수강한 학생은 누구인가?
- 수강과목 릴레이션(StudentCourse): 학생이 실제로 수강한 과목들
- 전공필수과목 릴레이션(RequiredCourses): 반드시 들어야 하는 과목들
- 조인을 사용할 때: StudentCourse ⋈ RequiredCourses
- 의미: 학생이 수강한 과목 중 필수 과목과 겹치는 것을 보여줌
- 결과: 필수 과목의 일부를 수강한 학생들도 나옴
- 디비전을 사용할 때: StudentCourse ÷ RequiredCourses
- 의미: 학생이 필수 과목 전체를 모두 수강했는지 확인
- 결과: 모든 필수 과목을 빠짐없이 수강한 학생만 반환됨