Search

관계형 데이터베이스 [개념]

생성일
2024/12/12

1. 관계 (relation)

1.1. 수학에서 relation

집합 (set)
서로 다른 객체(원소)의 모임
데이터가 중복되지 않도록 보장하며, 보통 빠른 검색과 삽입을 위해 설계된 자료구조
하나의 set에서 elements의 순서는 중요하지 않다.
관계 (relation)
카테시안 곱의 부분 집합 (subset of Cartesian product)
튜플들의 집합 (set of tuples)
Cartesian product A×B=(a,b)  aA and bBCartesian \ product \ A \times B = {(a, b) \ | \ a ∈ A \ and \ b ∈ B}
set Aset B에서 각각 원소를 하나씩 골라 만들 수 있는 모든 쌍들의 집합
(1, p), (1, q), (1, r), (2, p), (2, q), (2, r)
binary relationA×Bbinary \ relation ∈ A \times B
이항 관계 = A와 B의 카테시안 곱의 부분 집합
nary relationX1×X2××Xnn-ary \ relation ∈ X_1 \times X_2 \times … \times X_n
ntuplen-tuple
셀 수 있는 수량의 요소들을 순서에 따라 나열한 것으로, nn개의 요소를 가진 튜플

1.2. 관계형 모델에서 relation

관계형 모델에서 setdomain을 의미
student relation을 예로 들어 relational data model을 이해해 보자.
학생 관계의 도메인 정의하기
도메인 이름 (Domain Name)
설명 (Description)
값의 유형 (Value Type)
students_ids
학번 집합
7자리 정수 (7-digit integer)
human_names
사람 이름 집합
문자열 (String)
university_grades
대학교 학년 집합
정수 집합 {1, 2, 3, 4} (Set of Integers)
major_names
대학교에서 배우는 전공 이름 집합
문자열 집합 (Set of Strings)
phone_numbers
핸드폰 번호 집합
문자열로 표현된 숫자 (String of Digits)
만약 본인의 휴대폰 번호 외에 비상 연락망도 추가 해야 한다면 어떻게 해야할까?
phone_numbers라는 도메인이 본인의 휴대폰 번호와 비상 연락망 모두에 사용되므로 구분이 필요
이를 해결하기 위해 속성(attribute)이라는 개념을 도입
동일한 도메인(phone_numbers)을 사용하지만, 속성을 추가하여 각 값이 어떤 의미를 가지는지 구분
예시 속성
phone_num: 본인의 휴대폰
emer_phone_num: 비상 연락망
속성을 통해 동일한 도메인에 다양한 의미를 부여함으로써 중복 문제를 해결하고 데이터의 의미를 명확히 한다.
학생 관계에서의 튜플
학생 관계의 속성별 집합 중에서 각 속성에서 하나씩 값을 선택하여 구성된 것을 튜플이라고 한다.
예) (2023001, "김철수", 3, "컴퓨터공학", "010-1234-5678")
관계형 데이터 모델에서의 학생 관계
이 튜플들을 가장 잘 설명할 수 있는 방식이 테이블 형태로 나타내는 것
id
name
grade
major
phone_num
emer_phone_num
2023001
김철수
3
컴퓨터공학
010-1234-5678
010-3462-1536
2023002
이영희
2
경영학
010-8765-4321
010-5821-5685
2023003
박민수
1
전자공학
010-2345-6789
010-4859-1892
관계 이름(Relation Name)은 STUDENT
튜플(Tuple)은 테이블의 한 행(Row)을 구성
속성(Attribute)은 테이블의 각 열(Column)을 구성
여러 튜플들이 모여 하나의 관계(Relation), 즉 테이블을 형성
정리
주요 개념
설명
도메인 (Domain)
set of atomic values * atomic - 더 이상 나누어질 수 없어야 한다.
도메인 이름 (Domain Name)
domain 이름
속성 (Attribute)
domain이 relation에서 맡은 역할 이름
튜플 (Tuple)
각 attribute의 값으로 이루어진 리스트. 일부 값은 NULL일 수 있다.
관계 (Relation)
set of tuples
관계 이름 (Relation name)
relation의 이름

2. 관계 스키마 (relation schema)

관계(relation)의 구조를 나타낸다.
관계의 이름속성(attributes) 리스트로 표기된다.
예) STUDENT(id, name, grade, major, phone_num, emer_phone_num)
속성과 관련된 제약조건(constraints)도 포함한다.
관계의 차수(degree of a relation)
relation schema에서 attributes의 수
예) STUDENT(id, name, grade, major, phone_num, emer_phone_num) → degree 6

3. 관계형 데이터베이스 (relational database)

관계형 데이터 모델에 기반하여 구조화된 데이터베이스
관계형 데이터베이스는 여러 개의 관계들로 구성된다.

3.1. 관계형 데이터베이스 스키마(relational database schema)

관계형 스키마 세트(Relation Schemas Set) + 무결성 제약조건(Integrity Constraint)

3.2. 관계의 특징

relation은 중복된 tuple을 가질 수 없다. (relation is set of tuples)
relation의 tuple을 식별하기 위해 attribute의 부분 집합key로 설정한다.
relation에서 tuple의 순서는 중요하지 않다.
하나의 relation에서 attribute의 이름은 중복되면 안된다.
하나의 relation에서 attribute의 순서는 중요하지 않다.
attribute는 원자적(atomic) 이어야 한다.

3.3. NULL의 의미

NULL의 중의적 표현
1.
값이 존재하지 않는다.
해당 속성에 값이 아직 할당되지 않았거나, 아예 존재하지 않는 경우.
2.
값이 존재하나 아직 그 값이 무엇인지 알지 못한다.
해당 속성에 값이 존재하지만, 그 값에 대한 정보가 누락된 경우.
3.
해당 사항과 관련이 없다.
해당 속성이 특정 조건에서 의미가 없거나 적용되지 않는 경우.
예시 - 토익 점수 속성의 값이 NULL인 경우:
id
name
grade
toeic_score
김철수
NULL
이영희
912
박민수
990
김철수의 toeic_score가 NULL이면 TOEIC 점수가 있지만 입력되지 않은 상태일 수도 있고, 아예 시험을 치르지 않아 점수가 없는 상태로 해석할 수도 있다.
따라서 NULL의 의미는 상황에 따라 달라질 수 있으므로, 가능한 한 사용을 지양하는 것이 좋다.

4. 키(key)의 종류

4.1. 슈퍼키 (super key)

relation에서 tuplesunique하게 식별할 수 있는 attributes set
예) PLAYER(id, name, team_id, back_number, birth_date) 의 슈퍼키
1.
{id, name, team_id, back_number, birth_date}
2.
{id, name}
3.
{name, team_id, back_number}
4.
… etc

4.2. 후보키 (candidate key)

어느 한 attribute라도 제거하면 unique하게 tuples를 식별할 수 없는 super key
예) PLAYER(id, name, team_id, back_number, birth_date) 의 후보키
1.
{id}
2.
{team_id, back_number}
* 하나의 팀에 중복된 등 번호를 가진 선수는 없으므로 후보키 성립
minimal superkey라고 부르기도 한다.

4.3. 기본키 (primary key)

relation에서 tuples를 unique하게 식별하기 위해 선택된 candidate key
예) PLAYER(id, name, team_id, back_number, birth_date) 의 기본키
{id} 또는 {team_id, back_number}

4.4. 고유키 (unique key)

primary key가 아닌 candidate keys
예) PLAYER(id, name, team_id, back_number, birth_date) 의 고유키
{id} 가 기본키로 선택된 경우, 고유키는 {team_id, back_number}
대체키(alternate key)라고 부르기도 한다.

4.5. 외래키 (foreign key)

다른 relation의 primary key를 참조하는 attributes set
예) PLAYER(id, name, team_id, back_number, birth_date)TEAM(id, name, manager)가 있을 때 외래키는 PLAYER의 {team_id}

5. 제약조건 (constraints)

relational database의 relations들이 항상 지켜줘야 하는 제약 사항

5.1. 암묵적 제약조건 (implict constraints)

relational data model 자체가 가지는 constraints
relation은 중복되는 tuple을 가질 수 없다.
relation 내에서는 같은 이름의 attribute를 가질 수 없다.

5.2. 스키마 기반 제약조건 (schema-based constraints)

주로 DDL을 통해 schema에 직접 명시할 수 있는 제약조건
explicit constraints(명시적 제약조건)에 해당

5.2.1. 도메인 제약조건 (domain constraints)

attribute의 value는 해당 attribute의 domain에 속한 value여야 한다.
예시) 학년을 나타내는 grade의 value로 100이 지정되어서는 안된다.
id
name
grade
major
phone_num
4
2023002
이영희
100
경영학
010-8765-4321
3

5.2.2. 키 제약조건 (key constraints)

서로 다른 tuples는 같은 valuekey를 가질 수 없다.
예시)
id
name
grade
major
phone_num
2023002
홍진호
2023002
손흥민

5.2.3. NULL 값 제약조건 (NULL value constraint)

attribute가 NOT NULL로 명시됐다면 NULL을 값으로 가질 수 없다.
예시) phone_num 속성에 NOT NULL이 명시됐지만, NULL이 포함된 경우
id
name
grade
major
phone_num (NOT NULL)
010-1234-5678
010-5689-4341
NULL

5.2.4. 엔티티 무결성 제약조건 (entity integrity constraint)

primary keyvalueNULL을 가질 수 없다.
예시)
id
name
grade
major
phone_num (NOT NULL)
NULL
2022415
2021591

5.2.5. 참조 무결성 제약조건 (referential integrity constraint)

foreign keyprimary key도메인이 같아야 하고 primary key에 없는 valuesforeign key가 값으로 가질 수 없다.
예시) 존재하지 않는 team_id를 value로 사용
PLAYER
id
name
team_id
team_017
NULL
team_023
TEAM
id
name
manager
team_011
team_017
team_025

참고 자료