Post

관계형 데이터 모델

관계형 데이터 모델

관계형 데이터 모델

  • 데이터 베이스를 여러개의 관계(Relation) 집합으로 표현하는 모델
  • 관계(Relation)는 표(table) 형태로 표현되고, 각 행은 관련된 데이터 값의 모음을 표현함
  • 한 열의 값들은 모두 같은 데이터 타입을 가짐
  • 용어:
    • 튜플(Tuple): 테이블의 한 행을 나타냄
    • 속성(Attribute): 테이블의 열을 나타냄
    • 도메인(Domain): 속성이 가질 수 있는 값의 범위
    • 스키마(Schema): 데이터베이스의 구조와 제약 조건을 정의
    • 키(Key): 테이블에서 각 튜플을 고유하게 식별하기 위한 속성 또는 속성의 집합
    • 관계(Relation): 테이블 자체를 의미

Domain, Attribute, Tuple, Relation

Domain

  • 원자값(Atomic values, 더이상 쪼개질 수 없는 값)의 집합
  • 각 도메인은 데이터타입을 이용해 정의됨
  • 이름, 데이터타입, 포맷으로 특정됨
  • 예시: GPA

Relation Schema

  • $R(A_1, \dots, A_n)$
  • Relation의 이름 $R$과 Attribute의 목록 $A_1, \dots, A_n$
    • 속성 $A_i$ : 특정 도메인 $D$가 $R$ 내에서 수행하는 역할의 이름
    • $D$ : $A_i$의 속성, $dom(A_i)$로 표현
    • 관계 스키마(Relation Schema)의 속성 개수 $n$을 관계의 차수(degree of relation)라 함
  • 예시: 학생(이름, 학번, 나이, 전화번호, GPA)

Relation

  • 관계 $r(R)$은 관계 스키마 $R(A_1, \dots ,A_n)$에 따른 튜플(tuple)들의 집합으로 표현
  • 각 n-tuple $t$는 각 Attribute의 원소들의 ordered-list(순서가 의미분별적)
  • 테이블에서 튜플은 각 행(row), 특성은 각 열(column)
  • 특정 튜플 t의 i번째 값은 $t[A_i]$로 표기함
  • cartesian product로 수학적 정의 가능
    \(r(R) \subseteq dom(A_1) \times \cdots \times dom(A_n)\)

Charicteristics of Relations

  • Relation은 집합이기 때문에, 다음과 같은 속성을 가짐
    • Distinct Tuples: 모든 튜플은 서로 구별되어야 함 (중복 허용되지 않음).
    • Tuple Order Irrelevance: 튜플의 순서는 중요하지 않음.
  • 튜플은 속성과 값을 대응시키는 매핑(mapping)으로 표현 가능
    • $D = dom(A_i) \cup \dots \cup dom(A_n)$
    • $t[A_i]$는 반드시 $dom(A_i)$ 내에 존재
    • 따라서 (<속성>, <값>)의 집합으로 볼 수도 있음
  • Null 값은 알려지지 않은 값, 적용 불가능한 값 등등 다양한 의미가 있을 수 있음.
  • 관계 스키마(Relation schema)는 데이터베이스 내에서 어떤 사실(fact)이 표현될 것인지에 대한 선언(declaration)
    • 학생(이름, 학번, GPA) - entity에 대한 사실, 전공(학번, 과) - relation에 대한 사실

Relational Model Constraints

  • DB State
    • 데이터베이스에 실제로 저장되어 있는 모든 데이터 값의 집합
  • DB State에 따라 다양한 제약이 있음
    • Model-based Constraints: 모델 자체에 내재한 제약(e.g. 중복 튜플 불허)
    • Schema-based Constraints: 데이터 모델 스키마에 명시적으로 기술되는 제약조건
      예:
      • Domain Constraints: 각 속성의 값은 해당 속성의 도메인에 속해야 함.
      • Key Constraints: 각 테이블에는 고유한 키가 존재해야 하며, 키는 중복될 수 없음.
      • Entity Integrity Constraints: 기본 키(primary key)는 Null 값을 가질 수 없음.
      • Referential Integrity Constraints: 외래 키(foreign key)는 참조하는 테이블의 기본 키와 일치하거나 Null이어야 함.
      • User-defined Constraints: 사용자가 정의한 추가적인 제약 조건 (e.g., 특정 속성 값의 범위 제한).
      • Constraints on Null values: Null값 허용 여부
    • Application-based Constraints: 응용 프로그램으로 인한 제약

Key Constraints

  • Superkey$(SK)$: 각 튜플을 구별하는 중복되지 않는 속성들의 집합.
    • i.e. $t_i[SK] \neq t_j[SK], \forall i,j$
    • 예: 학생 테이블에서 {학번}, {이름, 학번}, {이름, 학번, GPA} 등
  • Key($K$): Superkey의 최소, $K$에서 하나의 속성이라도 제외한다면, 더이상 Superkey로서의 역할을 할 수 없는 최소집합.
    • cf) Key Attribute $\rightarrow$ 키를 구별하는 개별 속성(Key 자체가 아님)
  • Candidate Keys: 테이블에서 key가 여러개라면, 각 key는 Candidate가 됨
    • 예: “자동차” Relation에서, {번호판 번호}와 {자동차 등록번호} 모두 key가 될 수 있음
  • Primary Key: 여러 Candidate Keys 중 하나를 Primary Key로 지정할 수 있음

Relational DB Schema

  • 관계형 DB 스키마는 관계 스키마(Relation Schema)들의 집합과 무결성 제약조건(Integrity constraints)을 포함함
  • Relational DB Schema $S$
    • Relation Schema의 집합 $S = {R_1, \dots R_m}$
    • Integrity constraints의 집합 $IC$
  • Relational State $D$ of $S$
    • 데이터베이스 스키마 $S$에 따라 데이터베이스 상태 $D$는 관계 스키마 $R_1, \dots, R_m$ 각각에 대해 관계 상태 $r_1, \dots, r_m$의 집합으로 정의됨
    • $D = {r_1, \dots, r_m}$, 여기서 각 $r_i$는 $R_i$의 관계 상태
    • 데이터베이스 상태는 시간에 따라 변경될 수 있음 (삽입, 삭제, 갱신 등)
    • 데이터베이스 상태는 항상 무결성 제약 조건을 만족해야 하고, 그렇지 않다면 invalid state로 표현
  • Relation에 따라 같은 개념을 설명하는 특성이라도 다른 이름을 가질 수 있고 다른 개념을 설명하는 특성이라도 같은 이름을 가질 수 있음
    • 예: 회사(이름, …) 직원(이름, …) - 다른 개념을 설명하는 같은 특성 이름

Entity Integrity & Referential Integrity

Entity Integrity

  • Entity Integrity Constraint: 기본 키(primary key)는 Null 값을 가질 수 없음.
    • 기본 키는 각 튜플을 고유하게 식별하기 위해 반드시 값이 존재해야 함.
    • Null 값은 “알 수 없음” 또는 “적용 불가능”을 의미하므로 기본 키에 허용되지 않음.

Referential Integrity

  • Foreign Key(FK)
    외래 키(Foreign Key)는 수학적으로 다음과 같이 정의될 수 있음:
    • 두 관계 $R_1$과 $R_2$가 있을 때, $R_1$의 속성 집합 $FK$가 $R_2$의 기본 키 $PK$를 참조한다고 가정.
    • $FK$는 $R_1$의 속성들의 부분 집합이고, $PK$는 $R_2$의 속성들의 부분 집합.
    • $FK$가 외래 키가 되기 위한 조건:
      • $\forall t_1 \in r(R_1), \exists t_2 \in r(R_2)$ such that $t_1[FK] = t_2[PK]$ or $t_1[FK]$ is NULL.
    • 즉, $R_1$의 각 튜플 $t_1$에서 $FK$ 값은 $R_2$의 $PK$ 값과 일치하거나 NULL이어야 함.
  • Referential Integrity Constraint: 외래 키(foreign key)는 참조하는 테이블의 기본 키와 일치하거나 Null이어야 함.
  • 예를 들어, 학생 테이블의 “학과 코드”가 학과 테이블의 “학과 코드”를 참조하는 경우:
    • 학생 테이블의 “학과 코드” 값은 학과 테이블의 “학과 코드” 값 중 하나이거나 NULL이어야 함.
    • 외래 키 값이 Null인 경우, 참조 무결성 제약 조건은 적용되지 않음.
    • 외래 키 값이 Null이 아닌 경우, 반드시 참조하는 테이블의 기본 키 값과 일치해야 함.

Other types of constraints

  • Semantic Integrity constraints
    • 데이터의 의미와 관련된 제약 조건으로, 데이터베이스의 논리적 일관성을 유지하기 위해 사용됨.
    • 예:
      • 특정 속성 값의 범위 제한 (e.g., 나이는 0 이상이어야 함).
      • 특정 속성 간의 관계 (e.g., 종료 날짜는 시작 날짜 이후여야 함).
      • 특정 조건을 만족해야 하는 데이터 (e.g., 직원의 급여는 최소 임금 이상이어야 함).
    • 이러한 제약 조건은 응용 프로그램에서 구현될 수 있음.
  • Functional Dependency constraints
    • 관계(Relation) 내에서 특정 속성 집합이 다른 속성 집합을 고유하게 결정하는 제약 조건.
    • $X \rightarrow Y$: 속성 집합 $X$가 속성 집합 $Y$를 함수적으로 결정한다.
    • 즉, $X$의 값이 동일하면 $Y$의 값도 동일해야 함.
    • 예: 학생(학번, 이름, GPA)에서 학번 $\rightarrow$ 이름, GPA
  • Transition constraints
    • 데이터베이스 상태가 한 상태에서 다른 상태로 전환될 때 적용되는 제약 조건.
    • 예:
      • 계좌 잔액은 음수가 될 수 없음 (출금 시 잔액 확인).
      • 주문 상태는 “처리 중”에서 “완료”로만 변경 가능.
      • 직원의 직급은 강등될 수 없음.

Dealing with constraints violation

관계형 데이터베이스의 연산에 따라 위반할 수 있는 제약조건이 있음

Insert

  • 삽입된 튜플이 모든 제약 조건(Domain Constraints, Key Constraints, Entity Integrity, Referential Integrity)을 만족해야 함.
  • Key Constraint 위반: 삽입된 튜플의 기본 키 값이 이미 존재하는 경우, 삽입 거부.
    • 예: 학생 테이블에 학번이 123인 학생이 이미 존재하는데, 학번이 123인 새로운 학생을 삽입하려고 할 때.
  • Entity Integrity Constraint 위반: 삽입된 튜플의 기본 키 값이 Null인 경우, 삽입 거부.
    • 예: 학번이 Null인 학생 데이터를 삽입하려고 할 때.
  • Referential Integrity Constraint 위반: 삽입된 튜플의 외래 키 값이 참조하는 테이블의 기본 키 값과 일치하지 않는 경우, 삽입 거부.
    • 예: 학생 테이블에 학과 코드가 “CS101”인 데이터를 삽입하려고 하지만, 학과 테이블에 “CS101”이 존재하지 않을 때.
  • Domain Constraint 위반: 삽입된 튜플의 속성 값이 해당 속성의 도메인에 속하지 않는 경우, 삽입 거부.
    • 예: GPA 속성의 값이 4.3을 초과하거나 음수일 때.

Delete

  • 삭제된 튜플이 참조 무결성 제약 조건을 위반할 수 있음.
  • Referential Integrity Constraint 위반: 삭제된 튜플이 다른 테이블에서 외래 키로 참조되고 있는 경우, 삭제 거부.
    • 예: 학과 테이블에서 “CS101” 학과를 삭제하려고 하지만, 학생 테이블에서 “CS101”을 참조하는 튜플이 존재할 때.

Update

  1. 일반 속성을 갱신할 경우
    일반 속성(주 키 및 외래 키가 아닌 속성)의 갱신은 제약조건 문제를 일으키지 않음

  2. 주 키(Primary Key)를 갱신할 경우
    주 키의 값 변경은 기존 튜플을 삭제한 후 새로운 튜플을 삽입하는 것과 동일하게 처리해야 함

  3. 외래 키(Foreign Key)를 갱신할 경우
    새로운 외래 키 값이 참조하는 튜플이 반드시 존재하거나 null이어야 함 (참조 무결성 준수 필요)


해당 포스트는 서울대학교 산업공학과 박종헌 교수님의 데이터관리와 분석 25-1학기 강의를 정리한 내용입니다.

This post is licensed under CC BY 4.0 by the author.