본문 바로가기
Develop/Database

DB | 관계 데이터 모델

by Hoya324 2023. 8. 25.

CHAPTER 02 관계 데이터 모델

관계 데이터 모델의 개념

1. 릴레이션

릴레이션(relation)-테이블이라고 주로 많이 부름

  • 행과 열로 구성된 테이블
  • 릴레이션(relation)과 관계(relationship)을 구분 지을 필요가 있음

관계(relationship)

  • 릴레이션 내 데이터들의 관계와 릴레이션 간의 관계로 구분할 수 있다.
  • 릴레이션 간의 관계는 각 릴레이션 간의 식별 가능한 값을 이용하여 연결한다.

2. 릴레이션 스키마와 인스턴스

  • 릴레이션은 스키마인스턴스로 이루어진다.
  • 스키마(schema): 관계 데이터베이스의 릴레이션의 구성, 정보에 대한 기본적인 구조를 정의
    • 헤더: 테이블의 첫 행
    • 스키마는 헤더에 나타나며, 각 데이터의 특징을 나타내는 속성, 자료 타입 등의 정보 내포
  • 인스턴스(instance): 정의된 스키마에 따라 테이블에 실제로 저장되는 데이터의 집합

릴레이션 스키마

  • 릴레이션에 어떤 정보가 담길지 정의
  • 용어정리
    • 속성(attribute): 릴레이션 스키마의 열
    • 도메인(domain): 속성이 가질 수 있는 값의 집합
    • 차수(degree): 속성의 개수
  • 표기법: ‘릴레이션 이름(속성1, 속성2, 속성3, …)’ 또는 ‘릴레이션 이름(속성1: 도메인1, 속성2: 도메인2, 속성3: 도메인3, …)’

릴레이션 인스턴스

  • 릴레이션 스키마에 실제로 저장된 데이터의 집합
  • 용어정리
    • 투플: 릴레이션의 행
    • 카디날리티: 투플의 수

3. 릴레이션의 특징

  1. 속성의 단일 값을 가진다.
  2. 속성은 서로 다른 이름을 가진다.
  3. 한 속성의 값은 모두 같은 도메인 값을 가진다.
  4. 속성의 순서는 상관없다.
  5. 릴레이션 내의 중복된 투플은 허용하지 않는다.
  6. 투플의 순서는 상관없다.

관계 데이터 모델

  • 데이터를 2차원 테이블 형태인 릴레이션으로 표현
  • 제약조건(constraints)와 관계 연산을 위한 관계대수(relational algebra)를 정의
  • 관계 데이터베이스 시스템: 관계 데이터 모델에 기초하여 SQL을 기반으로 구현(아래의 내용을 SQL로 구현한 것)
    • 릴레이션의 생성, 관리
    • 제약조건
    • 관계대수

무결성 제약조건

  • 데이터를 저장하는 데 있어서 DB는 일관성을 유지하고 중복을 제거하는 등 데이터의 신뢰도를 유지해야 한다.

1. 키

  • 식별자의 역할
    • 릴레이션 내의 중복된 투플은 허용하지 않는다. 라는 조건이 있기에 투플들을 서로 구별할 수 있어야한다.
  • 관계를 맺는 역할도 수행한다.

슈퍼키(super key):

  • 투플을 유일하게 식별할 수 있는 하나의 속성 혹은 속성의 집합

후보키(candidate key)

  • 투플을 유일하게 식별할 수 있는 속성의 최소 집합
  • 하나의 속성으로 식별이 불가능할 때, 두 개 이상의 속성으로 이루어진 키를 복합키(composite key)라고 한다.

기본키(PK, primary key)

  • 여러 후보키 중 하나를 선정하여 대표로 삼는 키
  • 기본키 제약조건
    • 릴레이션 내 투플은 식별할 수 있는 고유한 값을 가져야 한다.
    • NULL 값은 허용하지 않는다.
    • 키 값의 변동이 일어나지 않아야 한다.
    • 최대한 적은 수의 속성을 가진 것이어야 한다.
    • 향후 키를 사용하는 데 있어서 문제 발생 소지가 없어야 한다.
  • 릴레이션 스키마를 표현할 때 기본키는 밑줄을 그어 표시한다.

대리키(surrogate key), 인조키(artificial key)

  • 기본키가 보안을 요하거나, 여러 개의 속성으로 구성되어 복잡하거나, 마땅한 기본키가 없을 때는 일련번호 같은 가상의 속성을 만들어 기본키로 삼는다. 이것이 대리키 또는 인조키(artificial key)라고 한다.
  • DBMS나 관련 소프트웨어에서 임의로 생성하는 값

대체키(alternate key)

  • 기본키로 선정되지 않은 후보키

외래키(FK, foreign key)

  • 다른 릴레이션의 기본키를 참조하는 속성
  • 관계 데이터 모델의 특징인 릴레이션 간의 관계를 표현
  • 성립 조건
    • 참조하고 참조되는 양쪽 릴레이션의 도메인이 서로 같아야한다.
    • 참조되는 릴레이션의 기본키의 값이 변경되면 이 기본키를 참조하는 외래키 값도 변경(연동되어야 한다.)
    • NULL 값과 중복 값 등이 허용된다.
    • 자기 자신의 기본키를 참조하는 외래키도 가능하다.
    • 외래키가 기본키의 일부가 될 수 있다.

2. 무결성 제약조건

  • 데이터 무결성(integrity): 데이터베이스에 저장된 데이터의 일관성정확성을 지키는 것
  • 투플의 삽입, 삭제, 수정 시 데이터의 제약조건 준수 여부를 확인하여야 한다.

[도메인] 제약조건

도메인 무결성 제약조건(domain integrity constraint)

  • 릴레이션 내의 투플들이 각 속성의 도메인에 지정된 값만을 가져야 한다.
  • 도메인 제약이라고도 한다.
  • 속성 값과 관련된 무결성으로, SQL 문에서 데이터 형식(type), 널(null, not null), 기본 값(default), 체크(check) 등을 사용하여 지정할 수 있다.

[키] 제약조건

개체 무결성 제약조건(entity integrity constraint)

  • 릴레이션은 기본키를 지정하고 그에 따른 무결성 원칙 즉, 기본키는 NULL 값을 가져서는 안 되며 릴레이션 내에 어오직 하나의 값만 존재해야 한다는 조건이다.
  • 기본키 제약(primary key constraint)이라고도 한다.

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

  • 부모 릴레이션: 참조되는(제공하는) 릴레이션
  • 자식 릴레이션: 참조하는(제공받는) 릴레이션
  • 자식 릴레이션의 외래키는 부모 릴레이션의 기본키와 속성의 도메인이 동일해야 하며, 자식 릴레이션의 값 변경 시 부모 릴레이션의 값에 제약을 받는다는 조건이다.
  • 즉, 부모 릴레이션의 도메인과 다른 값으로 삽입, 수정될 경우 거부되고, 반대로 자식 릴레이션에서 참조하고 있는 값을 부모 릴레이션에서 삭제하거나 다른 값으로 변경하려고 하면 거부된다.
  • 외래키 제약이라고도 한다.

유일성 제야조건, 고유성 제약조건(UNIQUE 제약조건)

  • 속성의 모든 값들에 서로 같은 값이 없어야 한다는 것.
  • 기본키와 달리 NULL값을 허용한다.

3. 무결성 제약조건의 수행

  • 제약조건의 준수여부는 데이터의 변경(삽입, 수정, 삭제)이 있을 때마다 확인해야 한다.

개체 무결성 제약조건

  • DBMS는 투플을 삽입하거나 수정할 때마다 개체 무결성 제약 조건을 지키는지 확인한다.
  • 삽입
    • 같은 PK를 가지거나, PK가 NULL인 경우 삽입 거부
  • 수정
    • 삽입과 마찬가지로 DBMS가 동일 값이 존재하는지 검색 후 처리한다.
  • 삭제
    • 외래키로 참조하고 있지 않으면 바로 삭제한다.

참조 무결성 제약조건

  • 단일 릴레이션에 대한 내용이 아니다. 두 릴레이션 간의 참조 관계를 처리한다.
  • 삽입
    • 자식 릴레이션에 삽입하려는 외래키가 부모 릴레이션에 없다면 삽입은 거부
    • 단, 자식 릴레이션의 외래기 속성에 NULL값을 허용한다면 삽입가능하다.
  • 삭제
    • 자식 릴레이션에서 투플이 삭제되는 경우 부모 릴레이션에는 아무런 영향을 주지 않으므로 바로 삭제 가능
    • 단, 부모 릴레이션에서 삭제 시에는 해당 투플을 참조하는 다른 릴레이션이 없는지 확인해야한다.
    • 만약 문제가 생긴다면,
      • 즉시 작업 중지
      • 자식 릴레이션의 관련 투플을 삭제
      • 초기에 설정된 다른 어떤 값으로 변경
      • NULL 값으로 설정

투플을 삭제할 때, 참조 무결성 제약조건을 수행하기 위한 4가지 옵션

명령어 의미
RESTRICTED 자식 릴레이션에서 참조하고 있을 경우 부모 릴레이션의 삭제 작업을 거부함
CASCADE 자식 릴레이션의 관련 투플을 같이 삭제
DEFAULT 자식 릴레이션의 관련 투플을 미리 설정해둔 값으로 변경
NULL 자식 릴레이션의 관련 투플을 NULL 값으로 설정함(NULL 값을 허가한 경우)
- 수정  
- 삭제와 삽입 명령이 연속해서 수행된다고 보면 된다.  
- 부모 릴레이션의 수정이 일어날 경우 삭제 옵션에 따라 처리된 후 문제가 없으면 다시 삽입 제약조건에 따라 처리된다.  

관계 대수

  • 릴레이션에서 데이터를 추출하는 데 사용하는 언어인 관계대수에 대해 배운다.

1. 관계 대수

  • 릴레이션에서 원하는 결과를 얻기 위해 수학의 대수와 같은 연산을 이용하여 질의하는 방법을 기술하는 언어이다.

관계의 수학적 의미

  • 관계 데이터베이스는 수학적 의미의 릴레이션에 기초한다.
  • 집합의 개념을 적용한 것으로, 합집합(), 교집합(), 카티전 프로덕트(X) 등이 있다.

관계대수 연산자

  • 순수 관계 연산: 관계형 데이터 모델을 위해 고안
    • 셀렉션(selection), 프로젝션(projection), 조인(join), 디비전(division), 개명(rename)
  • 일반 집합 연산: 수학의 집합이론에서 차용
    • 합집합(union), 차집합(difference), 교집합(intersection), 카티전 프로덕트(cartesian product)

관계대수식

  • 단항 연산자: 연산자<조건> 릴레이션
  • 이항 연산자: 릴레이션1 연산자<조건> 릴레이션2

2. 셀렉션과 프로젝션

  • 셀렉션과 프로젝션은 관계 대수에서 가장 기본적인 연산으로 하나의 릴레에션을 대상으로 하는 단항 연산자이다.

셀렉션(selection)

  • 릴레이션의 투플을 추출하기 위한 연산
  • 하나의 릴레이션을 대상으로 하는 단항 연산자
  • 찾고자 하는 투플의 조건을 명시하고 그 조건에 만족하는 투플을 반환한다.
  • 조건: <속성> = <상수값 또는 속성> 형태가 올 수 있다.

프로젝션(projection)

  • 릴레이션의 속성을 추출하기 위한 연산으로 단항 연산자이다.
  • 결과 릴레이션의 차수는 대상 릴레이션의 차수보다 작거나 같고 카디날리티는 동일하다.

3. 집합 연산

  • 집합연산자 중 합집합, 교집합, 차집합은 두 릴레이션의 차수 및 도메인과 속성의 순서가 동일해야 한다.
  • 각 릴레이션의 속성 수가 같고 순서도 같아야 하며, 각각 동일한 도메인으로 대응되어야 한다. → 합병 가능
    • 속성 이름은 동일하지 않아도 되먀, 반환되는 릴레이션의 속성 이름은 첫 번째 릴레이션의 이름과 같다.

합집합

  • 두 개의 릴레이션을 합하여 하나의 릴레이션을 반환한다.
  • 두 개의 릴레이션은 서로 같은 속성 순서와 도메인을 가져야 한다.

교집합

  • 두 릴레이션이 공통으로 가지고 있는 투플 반환

차집합

  • 첫 번째 릴레이션에는 속하고 두 번째 릴레이션에는 속하지 않는 투플을 반환한다.

카티전 프로덕트

  • 합집합, 교집합, 차집합이 수직적 연산이라면, 카티전 프로덕트는 수평적 연산
  • 두 릴레이션을 연결시켜 하나로 합칠 때 사용
  • 속성과 도메인이 동일할 필요는 없다.
  • 결과 릴레이션의 차수는 두 릴레이션의 차수의 합이며, 카디날리티는 두 릴레이션의 카디날리티의 곱이다.
  • 결과 릴레이션의 속성 이름은 두 릴레이션에서 그대로 가져와 사용
    • 만약 두 릴레이션의 속성 이름이 같다면, ‘<릴레이션 이름>.<속성 이름>’의 형태로 표현하거나 순서(위치)를 사용하여 표현한다.
  • 카티전 프로덕트는 두 릴레이션을 무조건 수평으로 합친 결과를 반환하기 때문에 결과에 의미가 없다.
    • 즉, 유용한 자료로 활용하기 힘들다.
    • 이를 해결한 것이 조인이다.

4. 조인

  • 두 릴레이션의 공통 속성을 기준으로 속성 값이 같은 투플을 수평으로 결합하는 연산
    • 즉, 두 릴레이션을 카티전 프로적트 연산을 한 후 셀렉션 연산을 한 것
  • 조인을 수행하기 위해서는 두 릴레이션의 조인에 참여하는 속성이 서로 동일한 도메인으로 구성되어야 한다.

세타조인(theta join)

  • 조인에 참여하는 두 릴레이션의 속성 값을 비교하여 조건을 만족하는 투플만 반환한다.

동등조인(equi join)

  • 내부조인(inner join)이라고도 한다.
  • 세타조인에서 =연산자를 사용한 조인
  • 보통 조인 연산은 동등조인을 지칭한다.

자연조인(natural join)

  • 동등조인에서 조인에 참여한 속성이 두 번 나오지 않도록 두 번째 속성을 제거한 결과를 반환

외부조인(outer join)

  • 외부조인은 자연조인의 확장된 형태
  • 외부조인은 자연조인 시 조인에 실패한 투플을 모두 보여주되 값이 없는 대응 속성에는 NULL 값을 채워서 반환한다.
    • 왼쪽(left) 외부조인, 오른쪽(right) 외부조인, 완전(full) 외부조인이 있으며, 각 방향을 기준으로 자연조인에 실패한 투플을 모두 보여준다.(빈 값은 NULL)

세미조인(semi join)

  • 자연조인을 한 후 두 릴레이션 중 한쪽 릴레이션의 결과만 반환한다.
  • 왼쪽, 오른쪽이 있다.

5. 디비전

  • 릴레리션의 속성 값의 집합으로 연산을 수행
  • 속성 A와 B로 이루어진 릴레이션 R과 속성 B로 이루어진 릴레이션 S의 디비전 연산은 , 릴레이션 S의 속성 B값과 서로 동일하게 대응하는 릴레이션 R의 속성 A의 투플들을 반환한다.

Reference

'Develop > Database' 카테고리의 다른 글

DB | 데이터 모델링  (1) 2023.08.28
DB | 데이터베이스 프로그래밍  (1) 2023.08.27
DB | SQL 고급  (2) 2023.08.27
DB | SQL 기초  (0) 2023.08.25
DB | 데이터베이스 시스템  (0) 2023.08.25