Supplementary Materials
Database System Concepts (7th Edition)
2. Introduction to the Relational Model
0. 데이터 모델
데이터 모델링
데이터 모델링
- 실제 데이터를 컴퓨터의 데이터베이스로 옮기는 과정이다.
- 데이터베이스 설계의 핵심이다.
- 개념적 데이터 모델링: 현실 세계에서 중요한 데이터를 추출해 개념적으로 표현한다.
- 논리적 데이터 모델링: 개념적 구조를 실제 데이터베이스의 논리적 구조로 변환한다.
데이터 모델
데이터 모델
- 데이터 모델은 데이터의 구조와 의미를 표현하는 방법이다.
데이터 모델의 3요소
- 데이터 구조(data structure): 저장할 데이터의 타입과 관계
- 연산(operation): 데이터를 검색·삽입·삭제·수정하는 작업
- 제약조건(constraint): 올바른 데이터만 저장되도록 제한하는 규칙
개념적 데이터 모델
- 사람이 현실 세계를 이해하기 쉽게 표현한다.
- 예: ER(Entity-Relationship; 개체-관계) 모델 - 데이터베이스 설계에 주로 사용한다.
논리적 데이터 모델
- 데이터베이스가 데이터를 저장하는 구조를 표현한다.
- 예: 관계형, 계층형, 네트워크 데이터 모델
1. 관계형 데이터 모델
관계형 데이터 모델 (Relational Model)
- 데이터를 컬럼과 로우를 가진 2차원 테이블 형태로 표현한다.
- 테이블 사이 관계를 외래 키로 연결한다.
- 정형화된 데이터이다.
- 현재 가장 널리 사용된다.
- E. F. Codd가 1970년에 제안했다.
주요 목적은 다음과 같다.
- 단순하고 이해하기 쉬운 모델 제공
- 논리적 구조와 물리적 저장 구조를 분리해 데이터 독립성 향상
- 레코드를 하나씩 처리하지 않고 집합 단위로 처리
- 수학적 이론에 기반한 데이터베이스 제공
장점
- 데이터 무결성 및 일관성
- 표준화된 SQL 지원
- 정교한 트랜잭션 관리 가능
- 다양한 상용/오픈소스 생태계 존재
단점
- 데이터 형식이 고정되어 스키마 변경이 번거롭고 유연성이 부족하다. (비정형 데이터를 다루기 어렵다.)
- 대규모 분산 환경(Big Data)에 한계
- 수평 확장(Scale-out)이 어렵다. (샤딩이 복잡하다.)
RDBMS 예시
- PostgreSQL, MySQL, Oracle, Microsoft SQL Server, SQLite, MariaDB 등
스키마와 인스턴스
| 관계 모델 | 일반 용어 | 파일 시스템 |
|---|---|---|
| 스키마(Schema) | 구조, 내포 | 헤더 |
| 인스턴스(Instance) | 현재 데이터, 외연 | 데이터 |
릴레이션의 스키마(schema)
- 릴레이션의 이름과 속성 구조
릴레이션의 인스턴스(instance)
- 특정 시점에 실제로 저장된 튜플들의 집합
- 무결성 제약조건은 존재할 수 없는 인스턴스들이 저장되는 것을 제한한다.
기본 구조
| 관계 모델 | 일반 용어 | 파일 시스템 |
|---|---|---|
| 릴레이션(Relation), 관계 | 테이블(Table), 표, 행렬 | 파일 |
| 속성, 애트리뷰트(Attribute) | 컬럼(Column), 열, 속성 | 필드(Field) |
| 튜플(Tuple) | 로우(Row), 행, 레코드 | 레코드(Record) |
릴레이션
- 하나의 개체에 관한 데이터를 2차원 테이블의 구조로 저장한 것
속성과 차수
도메인 (Domain)
- 속성에 허용되는 값의 집합이다.
- 도메인의 값은 원자값이어야 한다.
- 프로그래밍 언어의 데이터 타입과 비슷하다.
- 같은 데이터 타입이라도 의미가 다르면 서로 다른 도메인일 수 있다.
- 복합 속성이나 한 칸에 여러 값을 저장하는 다치 속성은 허용하지 않는다.
차수 (Degree)
- 릴레이션의 속성의 수
- 차수는 구조가 바뀌지 않는 한 거의 변하지 않는다.
튜플과 카디널리티
튜플
- 각 행에서 정의된 모든 속성 값들의 집합
NULL (^)
- NULL은 다음과 같은 상태를 의미하는 특수한 값이다.
- 아직 알려지지 않은 값
- 해당 사항이 없는 값
- NULL은 숫자
0, 공백 문자, 빈 문자열과 다르다.
카디널리티 (Cardinality)
- 릴레이션의 튜플의 수
- 데이터가 하나도 없는 릴레이션은 카디널리티 0을 가질 수 있다.
- 카디널리티는 데이터 삽입·삭제에 따라 자주 변한다.
릴레이션의 특성
관계형 모델의 릴레이션은 수학적으로 집합이므로 다음과 같은 특성을 갖는다.
속성의 특성
속성 이름의 고유성
- 한 속성의 이름은 유일하다.
- 하나의 릴레이션 안에서 속성들은 서로 다른 이름을 가져야 한다.
속성의 원자성
- 각 속성은 더 이상 나눌 수 없는 원자값을 가진다.
속성의 무순서성
- 속성의 순서는 의미가 없다.
- 열의 순서를 바꾸어도 같은 릴레이션이다.
튜플의 특성
튜플의 무순서성
- 튜플의 순서는 의미가 없다.
- 행의 순서를 바꾸어도 같은 릴레이션이다.
- 따라서 특정 순서가 필요하면 별도의 정렬 연산이 필요하다.
튜플의 유일성
- 동일한 튜플이 중복되지 않는다.
- 각 튜플을 고유하게 식별할 수 있어야 한다.
2. 릴레이션의 키
키 (Key)
- 각 튜플을 고유하게 식별하기 위한 하나 이상의 속성 집합이다.
키의 성질
유일성 (Uniqueness)
- 하나의 키 값으로 튜플 하나를 유일하게 식별해야 한다.
최소성 (Minimality)
- 식별에 불필요한 속성이 포함되지 않는다.
- 만약 하나의 속성을 제거하면 식별할 수 없다.
키의 종류
슈퍼키
슈퍼키 (Super Key)
- 하나의 튜플을 유일하게 식별할 수 있는 속성의 집합이다.
- 유일성을 만족하며, 최소성을 만족할 필요는 없다.
후보키
후보키 (Candidate Key)
- 불필요한 속성을 포함하지 않는 슈퍼키이다.
- 유일성과 최소성을 모두 만족한다.
- 복합키(Composite Key): 두 개 이상의 속성으로 구성된 후보키이다.
기본키 (Primary Key)
- 여러 후보 키 중 대표로 선택한 키이다.
- 기본키 선정 기준
- 값이 항상 고유한가?
- NULL이 발생하지 않는가? (
NOT NULL) - 값이 자주 변경되지 않는가?
- 가능한 한 짧은 문자열이나 작은 정수인가?
- 가능한 한 복합키가 아닌가?
- 대리키(Surrogate Key): 자연스러운 기본키가 없는 경우, 레코드 번호와 같이 인위적인 키 속성을 릴레이션에 추가한 것이다.
대체키 (Alternate Key)
- 후보키 중 기본키로 선택되지 않은 키이다.
외래키
외래키 (Foreign Key)
- 다른 릴레이션의 기본키를 참조하는 속성이다.
- 릴레이션 사이의 관계를 표현한다.
- 참조 무결성을 보장해야 한다.
외래키는 다음 형태로 사용될 수 있다.
- 다른 릴레이션의 기본키 참조
- 같은 릴레이션의 기본키 참조
- 복합 기본키의 구성요소
3. 무결성 제약조건
데이터 무결성 (Data Integrity)
- 데이터가 정확하고 유효하며 일관된 상태를 유지하는 것을 말한다.
- DBMS는 데이터가 갱신될 때 제약조건을 자동으로 검사한다.
도메인 무결성
도메인 무결성 제약조건
- 속성은 정해진 도메인의 원자값만 가져야 한다.
- SQL 관련 기능: 자료형,
NOT NULL,DEFAULT,CHECK
엔터티 무결성
엔터티 무결성 제약조건
- 기본 키의 어떤 속성도 NULL이 될 수 없다.
- SQL 관련 기능:
PRIMARY KEY
참조 무결성
참조 무결성 제약조건 (Referential Integrity Constraint)
- 외래 키는 존재하는 기본 키를 참조해야 한다.
- SQL 관련 기능:
FOREIGN KEY
참조 무결성의 성립
- 참조되는 릴레이션에 동일한 기본 키 값이 존재한다. (외래 키의 도메인은 참조되는 기본 키의 도메인과 같아야 한다.)
- 외래 키가 자신의 기본 키 구성요소가 아니고, 외래 키가 선택적 관계를 표현하는 경우, 해당 외래 키를 NULL로 두고 참조 무결성 검사에서 제외한다. (외래 키가 복합 기본 키의 일부라면 엔터티 무결성 때문에 NULL을 가질 수 없다.)
참조 무결성의 위배
- 참조하는 릴레이션에 튜플을 삽입하는 경우, 그 튜플의 외래 키가 존재하지 않는 기본 키를 참조할 때 문제가 발생한다.
- 참조되는 릴레이션에 튜플을 삭제하는 경우, 그 튜플의 기본 키를 참조하는 외래 키가 있을 때 문제가 발생한다.
DBMS의 참조 무결성 유지
- 제한 (
RESTRICT): 위반을 일으키는 연산을 거부한다. - 연쇄 (
CASCADE): 참조하는 행도 함께 삭제한다. - 널값 설정 (
SET NULL): 외래 키를 NULL로 변경한다. - 기본값 설정 (
SET DEFAULT): 외래 키를 지정된 기본값으로 변경한다.
cf. 데이터 모델의 종류
| 시기 | 유형 | 핵심 특징 |
|---|---|---|
| 1960년대 | 계층형 | 데이터를 부모-자식 트리 구조로 표현 |
| 1960년대 | 네트워크 | 레코드와 관계를 그래프 구조로 표현 |
| 1970년대 | 관계형 | 데이터를 테이블로 표현하고 속성 값으로 연결 |
| 1980년대 후반 | 객체지향형 | 데이터와 관련 프로그램을 객체로 결합 |
| 1990년대 후반 | 객체관계형 | 관계 DBMS에 객체 지향 기능 추가 |
| 2000년대 이후 | NoSQL | 반정형·비정형 빅데이터와 분산 처리 지원 |
계층형·네트워크
계층형 데이터 모델 (Hierarchical)
- 데이터를 트리 구조로 표현
네트워크 데이터 모델 (Network)
- 데이터를 그래프 구조로 표현
한계
- 데이터 접근 경로를 프로그램에 미리 정의해야 함
- 레코드가 포인터로 연결되어 구조 변경이 어려움
- 데이터 독립성이 낮음
- 한 번에 하나의 레코드 중심으로 처리
- 프로그램 개발 생산성이 낮음
객체 기반 모델
객체지향형 데이터 모델
- 복잡한 데이터를 객체로 표현하고 데이터와 프로그램을 결합
객체관계형 데이터 모델
- 관계형 모델에 사용자 정의 타입과 새로운 연산을 추가
표현력은 높아지지만 시스템 복잡성도 증가
NoSQL
NoSQL (Not only SQL)
- 소셜미디어와 웹 서비스에서 발생하는 대규모 반정형·비정형 데이터를 처리하기 위해 등장했다.
- 비정형 데이터 처리에 유리하다.
문서 기반 모델 (Document)
- JSON 또는 BSON 형태의 문서 구조로 데이터를 저장한다.
- 예: MongoDB, CouchDB 키-값 모델 (Key-Value)
- 유일한 Key에 Value를 매핑하여 단순하고 빠르게 데이터를 읽고 쓴다.
- 예: Redis, DynamoDB 그래프 데이터 모델 (Graph)
- 노드(Node)와 간선(Edge)을 사용하여 데이터와 그 사이의 연결 관계를 직관적으로 표현한다.
- 예: Neo4j 컬럼 기반 모델 (Column-family)
Vector
Vector
- 데이터를 고차원 수치 공간으로 변환한 것
VectorDB
- 텍스트, 이미지, 오디오 같은 비정형 데이터를 벡터 임베딩 형태로 저장하고 검색하는 데이터베이스
- 활용 목적: 유사성 검색, 의미 기반 검색
벡터 임베딩
- 자연어 문장 예시
- “강아지” → [0.12, 0.85, -0.33, …]
- “개” → [0.10, 0.88, -0.30, …]
- 같은 의미의 단어일수록 벡터 간 거리가 가까움
- 검색 시 키워드 매칭 대신 의미적 유사성으로 결과 제공
VectorDB의 주요 기능
- 벡터 저장: 고차원 벡터를 효율적으로 저장
- 근사 최근접 탐색(ANN)
- 코사인 유사도, 유클리드 거리
- 대규모 데이터에서도 빠르게 유사 벡터 검색
- 메타데이터 관리: 벡터 + 원본 데이터(문서, 이미지 등) 함께 저장
- 확장성: 대규모 AI 응용()
VectorDB의 장점
- 의미 기반 검색 (키워드 매칭을 넘어선 검색)
- 비정형 데이터(텍스트, 이미지, 음성) 활용 가능
- 생성형 AI, 추천 시스템, 개인화 서비스에 최적화
VectorDB의 단점
- 전통적인 트랜잭션/정합성 기능 부족(ACID 보장 약함)
- 생태계 성숙도가 낮음 (새로운 분야)
- 기존 RDBMS 대비 관리 경험/도구 부족
대표적인 VectorDB 제품
- Pinecone: 클라우드 기반, SaaS
- Weaviate: 오픈 소스, Graph + Vector
- Milvus: 대규모 벡터 검색 특화
- FAISS: Facebook AI, 라이브러리 형태