1. 관계 데이터 모델의 개념
개념적 구조를 논리적 구조로 표현하는 논리적 데이터 모델로 하나의 개체에 관한 데이터를 하나의 릴레이션에 저장.
릴레이션(테이블) 내의 관계와 릴레이션(테이블) 간의 관계가 존재.
예) 도서 릴레이션의 '도서번호'와 고객 릴레이션의 '고객번호'를 주문 릴레이션에 저장하여 관계를 표현
: 행과 열로 구성된 테이블. 하나의 개체에 관해 데이터를 2차원 테이블의 구조로 저장한 것.
스키마(schema)와 인스턴스로 이루어짐.

: 릴레이션의 논리적 구조로, 릴레이션의 이름과 포함된 모든 속성의 이름으로 정의.
릴레이션이름 (속성1, 속성2, 속성3 ...)릴레이션이름(속성1: 도메인1, 속성2: 도메인2, ...): 릴레이션 스키마에 실제로 저장된 데이터 집합
| 특징 | 설명 |
|---|---|
| 속성의 원자성 | - 속성은 원자값(단일값)만을 가짐 - 여러 값을 넣을 때에는 테이블을 분리하거나 속성을 나눠야함 |
| 속성의 무순서성 | - 하나의 릴레이션에서 속성 사이의 순서는 무의미함 |
| 속성의 동일성 | - 각 속성은 정의도니 도메인에 속하는 동일한 유형의 값만을 가짐 |
| 튜플의 유일성 | - 하나의 릴레이션에는 동일한 튜플이 존재할 수 없음 (중복저장X) |
| 튜플의 무순서성 | - 하나의 릴레이션에서 튜플 사이의 순서는 무의미함 |
데이터를 2차원 테이블인 릴레이션으로 표현함. 릴레이션에 대한 제약 조건과 관계연산을 위해 관계대수를 정의함
관계 데이터베이스 시스템은 관계 데이터 모델을 컴퓨터 시스템에 구현한 것으로 관계 데이터 모델에 기초해 SQL을 기반으로 구현하였다.
2. 무결성 제약조건
키(key): 릴레이션에서 특정 튜플들을 유일하게 구별하는 속성 또는 속성들의 집합. 키가 되는 속성은 반드시 값이 달라서 튜플들을 서로 구별할 수 있어야함.
키의 특성으로는 아래와 같은 것들이 있고, 예로는 기본키, 대체키, 외래키, 슈퍼키, 후보키를 들 수 있다.
| 키의 종류 | 설명 |
|---|---|
| 슈퍼키 | - 유일성을 만족하는 속성/속성들의 집합 |
| 후보키 | - 유일성과 최소성을 만족하는 속성/속성들의 집합 - 슈퍼키 중에서 불필요한 속성을 제거한 키 |
| 기본키 | - 후보키 중에서 기본적으로 사용하기 위해 선택한 키 - NULL을 허용하지 않음 - 밑줄을 그어서 표시 |
| 대체키 | - 기본키로 선택되지 못한 후보키 |
| 대리키 | - 기본키가 보안을 필요로 하거나 여러 속성으로 구성되어 복잡하거나, 마땅한 기본키가 없을 때, 일련번호 같은 가상의 속성을 만들어 기본키로 삼음 - DBMS나 소프트웨어가 임의로 생성함 |

무결성: 데이터에 결함이 없는 상태를 말한다. 즉, 데이터가 정확하고 유효하게 유지된 상태.
데이터의 무결성: 데이터의 무결성을 보장하고 일관되고 정확한 상태로 유지하기 위한 규칙으로 일관성과 정확성을 바탕으로 구축된 데이터베이스가 계속 무결성을 유지하기 위해서는 튜플의 삽입/삭제/수정 시 데이터의 제약조건 준수 여부를 확인해야함.
도메인 무결성 제약조건
도메인 제약: 릴레이션 내 튜플들이 각 속성의 도메인에 지정된 값만 가져야한다는 조건
위반 예) INT가 도메인인 애트리뷰트인데, 특정 튜플에서 VARCHAR.
개체 무결성 제약조건
기본키 제약: 기본키는 NULL 값을 가져서는 안되며 릴레이션 내에서 오직 하나의 값만 존재해야하는 것을 지켜야하는 조건.
위반 예) 기본키가 NULL이거나 중복인 경우, 복합키로 만든 기본키의 일부가 NULL, 기본키를 가진 행 삭제 시 -> 해당 기본키를 참조하는 외래키가 존재할 때
참조 무결성 제약조건
외래키 제약: 릴레이션 간의 참조관계를 선언하는 제약조건으로, 자식 릴레이션의 외래키는 부모 릴레이션의 기본키와 도메인이 같아야하며, 자식 릴레이션의 값이 변경될 때 부모 릴레이션의 제약을 받음. (부모에 없는 값을 자식이 참조하면 위반) 다만, 외래키 속성이 널값을 가질 수 는 있다.
위반 예) 참조 중인 부모 키 삭제/변경, 존재하지 않는 부모 키 참조
부모 릴레이션에서 튜플을 삭제할 때 참조 무결성 제약 조건을 수행하기 위한 옵션
3. 관계대수
릴레이션에서 원하는 결과를 얻기 위해 릴레이션의 처리 과정을 순서대로 기술하는 절차적 언어.
기본 연산자 5개(셀렉션, 프로젝션, 합집합, 차집합, 카티션 프로덕트). 일반 집합 연산자와 순수 관계 연산자로 분류.
피연산자와 연산의 결과 모두 릴레이션인 폐쇄 특성이 있음.
일반 집합 연산자: 릴레이션이 튜플의 집합이라는 개념 이용
합집합, 교집합, 차집합은 피연산자인 두 릴레이션이 합병 가능해야 할 수 있음.
합병 가능 조건:
:합병 가능한 두 릴레이션 R과 S의 합집합
: 합병 가능한 두 릴레이션 R과 S의 교집합
: 합병 가능한 두 릴레이션 R과 S의 차집합
: 릴레이션 R에 속한 각 튜플과 릴레이션 S에 속한 각 튜플을 모두 연결하여 만들어진 새로운 튜플을 반환
순수 관계 연산자: 릴레이션의 구조와 특성을 이용하는 연산자.
릴레이션에서 조건을 만족하는 튜플만 추출하기 위한 연산자
조건식
비교식, 프레디킷이라고도함
속성과 상수의 비교나 속성들 간의 비교로 표현
비교연산자와 논리연산자를 이용해 작성
교환법칙 성립
예) 고객 릴레이션에 등급이 gold이고, 적립금이 2000 이상인 튜플 검색:
릴레이션의 속성을 추출하기 위한 단항 연산자
예) 고객 릴레이션에서 적립금 검색:
두 릴레이션의 공통 속성을 기준으로 속성값이 같은 튜플을 수평으로 결합하는 연산으로 기본 연산자의 조합으로 구현할 수도 있는 유도된 연산자.
표현은 릴레이션1 ⋈ 릴레이션2으로 하며 기본 조인연산과 확장된 조인연산으로 구분됨.
| 기본 조인 연산 종류 | 설명 |
|---|---|
| 세타 조인() | 두 릴레이션간의 속성값을 비교하여 조건에 맞는 튜플을 반환 |
| 동등 조인() | 세타조인에서 = 연산자를 사용한 조인으로 보통 조인을 말하면 이쪽. |
| 자연 조인() | 동등조인과 동일하지만 중복 속성을 제거하고 반환. |
세타조인 중에서 비교연산자가 '='인 경우로 가장 많이 사용되며, 양쪽 테이블의 공통 컬럼이 모두 결과에 나타남.
예) 고객이 주문한 사항을 모두 나타내기 위해서는 고객.고객번호 = 주문.고객번호로 동등조인
조인 조건에 비교연산자를 자유롭게 사용하며 양쪽 테이블의 공통 컬럼이 모두 결과에 나타남.
예) 나이 25세 이상인 고객이 주문한 사항을 모두 나타내기 위해서는 고객.고객아이디 = 주문. 고객아이디 ^ 고객.나이 > 25 주문.
동등조건에서 중복되는 조인 칼럼을 하나 제거하여 더 깔끔하게 보여주는 조인
자연조인 연산을 확장한 관계 대수 연산자로 자연조인에서 조인 조건에 맞지 않아 제외되는 튜플도 버리지 않고 NULL을 채워 반환함.
| 기본 조인 연산 종류 | 설명 |
|---|---|
| 왼쪽 외부 조인(⟕) | 왼쪽에 있는 릴레이션1에 존재하는 모든 튜플을 결과 릴레이션에 포함시킴 |
| 오른쪽 외부 조인(⟖,) | 오른쪽에 있는 릴레이션1에 존재하는 모든 튜플을 결과 릴레이션에 포함시킴 |
| 완전 외부 조인(⟗) | 양쪽에 존재하는 모든 튜플을 결과 릴레이션에 포함시킴 |
자연조인 후 두 릴레이션 중 한 쪽 릴레이션의 결과만 반환.
릴레이션1 ⋉ 릴레이션2: 릴레이션2를 조인 속성으로 프로젝트 연산한 후, 릴레이션1에 자연 조인하여 결과 릴레이션을 구성
불필요한 속성을 미리 제거하여 조인 연산 비용을 줄이는 장점 존재. 교환법칙이 성립하지 않음.
수업 때 이거 바로 이해하지 못해서? 기억하지 못해서, 후에 문제 풀이할 때 써먹지 못했는데, 지금 생각해보면 이거 사용해서 풀면 조인하고, 프로젝션하거나 할 필요없이 정말 더 효율적으로 처리할 수 있었을 것 같다.
다른 연산들과 달리 릴레이션의 속성값의 집합으로 연산을 수행함.
조인을 수행한 후 릴레이션2의 모든 튜플과 관련있는 릴레이션1의 튜플을 추출하는 연산으로 사용. 특정 조건을 모두 충족하는 대상을 찾을 때 사용
이것도 수업에서 바로 이해 못해서 그렇지 왠지 디비전 썼으면 뒤에 풀었던 문제를 더 쉽게? 간단하게? 푸는 방법이 있었을 것 같다...
| 관계대수 연산 | SQL 키워드 | 설명 |
|---|---|---|
| 셀렉션 | WHERE | 조건에 맞는 행/튜플만 추출 |
| 프로젝션 | SELECT | 필요한 열/애트리뷰트만 추출 |
| 합집합 | UNION | 두 결과의 합 (중복 자동 제거, 속성의 수가 동일해야함) |
| 차집합 | EXCEPT/NOT IN | 첫 번째 결과에서 두 번째 결과를 제외 |
| 카티션 곱 | FROM R, S / CROSS JOIN | 두 테이블 모두 가능한 조합 ( 개의 행 생성) |
| 조인 | JOIN ~ ON | 특정 조건(주로 외래키)를 만족하는 행들만 결합 |
| 디비전 | NOT EXISTS | 모든 조건을 만족하는 대상 검색 |