[데이터베이스] 2. Relational Model

2025. 4. 15. 16:26Computer Science/데이터베이스

1. 관계형 모델이란?

- 수학 기반 모델 (수리적 표현): 다이어그램(UML) 같은 시각 표현이 아니라, 수학적 기호와 개념을 통해 데이터 구조를 표현

- 핵심 구조

- 데이터베이스: 여러 개의 테이블(관계) 집합
- 관계 R: 속성들의 카티시안 곱의 부분집합
- Ai: 속성 (attribute, 도메인, 필드)
- ai: 속성 값
- 스키마: R(A₁, A₂, ..., Aₙ)
- 튜플: (a₁, a₂, ..., aₙ)

 

2. Relation as Table : 테이블로 표현된 관계

  • Attributes: 열 (column)
  • Tuples: 행 (row)
  • Relation schema : 테이블 이름 + 속성 목록 + 타입 + 제약조건 (키)
Movie(title, year, length, genre)

 

왜 관계형 모델인가?

- 단순하고 직관적

- 우리가 생각하는 방식과 유사 (속성 - 값의 테이블 형태)

- SQL과 연결되며, 비저러차적(선언형) 언어와 호환됨

- 기초배경: 관계 대수

 

SQL을 통한 스키마 정의

- SQL: 관계형 데이터베이스용 선언형 언어

# DDL (기본 구조)
CREATE TABLE Movies (
  title CHAR(100),
  year INT,
  length INT,
  genre CHAR(10),
  studioName CHAR(20),
  producerC# INT,
  PRIMARY KEY (title, year)
);

# 수정
ALTER TABLE Movies ADD address CHAR(100);
ALTER TABLE Movies DROP producerC#;

# default 값 설정
genre CHAR(10) DEFAULT 'UNKNOWN'

 

 

3. 관계 대수 (Relational Algebra)

- Algebra = Operand(피연산자) + Operator(연산자)

 

- Operand: Relation(table)

- Operator: selection, projection, join, union 등

 

관계대수 핵심 연산자들

- Set Operators (중복 x) : union, intersection, difference

- Bag Operators (중복 o): selection, projection, products, joins

 

연산자 기호 의미 목적
selction σ 조건에 맞는 행(tuple) 선택 필터링
project π 특정 열만 선택 칼럼 선택
cartesian product × 모든 tuple 조합 기본 join 전 단계
join 두 relation을 공통 속성 기준으로 연결 관계 통합
union 두 relation의 모든 tuple 포함 전체
difference - 첫 relation에만 있는 tuple 차이 계산
intersection 두 relation 모두에 있는 tuple 공통값
aggregation / grouping γ SUM, COUNT 등 분석용
중복 제거  δ Bag -> Set 변환 SQL의 DISTINCT와 유사

 

Selection(선택) - σ

: 행(튜플)을 조건에 따라 고른다.

 

Projection - π

: 열(속성)을 선택, 필요한 속성만 남긴다.

 

Cartesian Prodcuct - x

: 두 테이블의 모든 튜플을 모든 방식으로 조합

ex) R1 x R2

보통은 join 전에 필터링 조건 붙여서 사용

 

Join - ⨝

: 공통 속성을 기준으로 두 테이블 연결

- Natural Join: 두 테이블에 동일한 속성 이름이 있는 경우, 그 속성 값을 기준으로 자동으로 매칭하여 조인

- Theta Join: 임의의 조건 (특정 조건)을 이용해 두 테이블을 조인하는 방식 ( >, <, = 등)

 

Bag

=Mutliset =중복허용집합, 즉 같은 값을 여러 번 가질 수 있는 데이터 구조

- SQL은 Bag 기반 언어이다! 즉 중복을 자동으로 제거하지 않는다. 

- 중복 제거는 명시적으로 해줘야 한다. (DISTINCT)

- Set 법칙 ≠ Bag 법칙

-> 교환법칙은 둘 다 성립하지만 항등법칙은 Bag에서 성립하지 않는다.

-> S ∪ S = S는 Set에서만 성립, Bag에선 중복 누적

 

연산 Set Bag
Union 중복 제거 중복 수 합산
Intersection 공통 원소만 최소 등장 횟수만큼 포함
Difference 차집합 등장 횟수 차만큼 남김 (0 미만은 제거)

 

 

확장 연산자 (Extended Algebra)

  • δ : 중복 제거 (DISTINCT)
  • γ : 그룹핑/집계 (COUNT, SUM 등)
  • τ : 정렬 
  • OUTER JOIN: 매칭 안 되는 튜플도 남기는 조인 

- Extended Projection: π 연산자 내에서만 산술 가능

Extended Projection

 

- Aggregation(집계 연산자) / Grouping : SUM, AVG, COUNT, MIN, MAX 등 칼럼 전체에 적용, γ 연산자

Aggregation, Grouping

 

Grouping

 

- 외부 조인 (Outer Join)

: 내부 조인시에는 매칭되지 않는 튜플은 버려지지만, 외부조인에선 NULL로 채워서라도 보존한다.  연결되지 않은 튜플까지 보고 싶을 때 사용.

 

관계 대수식 표현 트리

- 트리 구조로 연산 순서 시각화

- 루트는 가장 마지막 연산자

- 리프 노드는 테이블

관계 대수식 표현 트리

 

★ 제약조건 (Constraints)

- Key Constraint : 튜플을 유일하게 식별하는 속성

- Referential Integrity (참조 무결성): 한 릴레이션의 속성 값이 다른 릴레이션의 key로 존재해야 함

Key Constraint

 

4. Relational Schema

 

UML → RelationModel

 

- Class → Relational Schema

CREATE TABLE Employee (
  name CHAR(30),
  address CHAR(100),
  citizenID CHAR(12) PRIMARY KEY,
  division CHAR(20),
  salary REAL
);

 

- Association → Relational Schema

  • 단방향 association: 테이블에 속성 추가
CREATE TABLE Person (
  name CHAR(30),
  age INT,
  ID CHAR(12) PRIMARY KEY,
  companyName CHAR(40),
  companyAddress CHAR(100)
);
  • 다대다 association: 별도 관계 테이블 생성 
CREATE TABLE Contract (
  signYear Year,
  salary INT,
  citizenID CHAR(12),
  teamName CHAR(40),
  PRIMARY KEY (citizenID, teamName)
);

 

- Aggregation → Relation Schema

: 외래키 포함 or 조인 테이블

CREATE TABLE County (
  countyName CHAR(30),
  population INT,
  belongsToDept CHAR(30)
);

 

- Inheritance → Relation Schema

: 상속 구조 → 여러 테이블로 분리 저장 가능

CREATE TABLE Person (
  name CHAR(30),
  age INT,
  ID CHAR(12) PRIMARY KEY
);
CREATE TABLE Student (
  name CHAR(30),
  age INT,
  ID CHAR(12) PRIMARY KEY,
  dept CHAR(30),
  studentID INT,
  score REAL
);

 

Weak Entity Set

: 복합키 사용 (자신의 키 + 상위 개체의 키)

CREATE TABLE Player (
  name CHAR(30),
  backNumber INT,
  position CHAR(3),
  teamName CHAR(30),
  PRIMARY KEY (backNumber, teamName)
);

'Computer Science > 데이터베이스' 카테고리의 다른 글

[데이터베이스] 1. Data Model  (0) 2025.04.15