본문 바로가기

Database

[DB]관계 데이터 모델

관계 데이터 모델의 개념

릴레이션

  • 릴레이션(Relation): 행과 열로 구성된 테이블
  • 속성(Attribute): 세로의 값으로 열(Column)이라고 합니다.
  • 튜플(Tuple): 가로의 값으로 행(Row)이라고 한다.
  • 차수(Degree): 속성의 수
  • 카디날리티(Cardinality): 튜플의 수
  • 스키마(Schema): 릴레이션이 어떻게 구성되는지, 어떤 정보를 담고 있는지에 대한 기본적이 구조를 정의(Table 첫 행의 Header)
  • 인스턴스(Instance): 정의된 스키마에 따라 테이블에 실제 저장된 데이터의 집합

 

 

스키마의 구성요소

  • 속성(Attribute): 릴레이션의 스키마 열
  • 도메인(Domain): 속성이 가질 수 있는 값의 집합
  • 차수(Degree): 속성의 개수

위 테이블에서 속성은 도서번호, 도서이름, 출판사, 가격 이기 때문에 차수4가 됩니다.

도메인Integer, Varchar(10)과 같이 값이 가질 수 있는 범위 및 집합을 의미합니다. 이러한 스키마는 릴레이션(속성1, 속성2, ...) 이런식으로 표현합니다.일반적으로 도메인을 제외하고 릴레이션 이름과 속성 만을 적어서 도서(도서번호, 도서이름, 출판사, 가격)과 같이 표현합니다.

 

 

인스턴스의 구성요소

  • 튜플(Tuple): 릴레이션의 행
  • 카디날리티(Cardinality): 튜플의 수

릴레이션 내의 모든 튜플은 서로 중복되지 않아야 하며, 튜플속성의 개수스키마차수가 일치해야 합니다.

 

 

릴레이션의 특징

  • 속성은 단일 값을 갖는다. (원자값)
  • 속성의 이름을 유일성을 갖습니다. (= 서로 다른 이름을 갖습니다.)
  • 한 속성의 값은 모두 같은 도메인 값을 갖습니다.
  • 속성의 순서는 상관 없습니다.
  • 릴레이션 내의 중복된 튜플은 허용하지 않습니다.
  • 튜플의 순서는 상관없습니다.

 

 

관계 데이터 모델

관계 데이터 모델은 데이터를 2차원 형태의 릴레이션으로 표현 한 것으로 릴레이션에 대한 제약 조건(Constraint)과 관계 연산을 위한 관계 대수를 정의하였습니다.

 

이러한 관계 데이터 모델을 컴퓨로 구현하게 되면 관계 데이터베이스 시스템이 됩니다.


키의 종류

  • 특정 튜플을 식별할 때 사용하는 속성 혹은 속성의 집합
  • 키가 되는 속성은 중복된 값이 없어야 하며 튜플을 구별할 수 있어야 합니다.
  • 키는 릴레이션 간 관계를 맺는 데도 사용됩니다.

한 릴레이션에 중복된 튜플은 존재할 수 없으며, 각각의 튜플을 식별하는 역할을 키가 담당합니다.

일반적으로 키는 단일 속성으로 지정하지만, 단일 속성만으로 튜플을 식별할 수 없을 때 두 개 이상의 속성을 묶어 복합 속성으로 사용하기도 합니다.

위 릴레이션에서 고객번호 만으로 튜플을 식별할 수 없기 때문에 (고객번호, 도서번호)(고객번호, 주문일자)와 같은 집합을 키로 사용할 수 있습니다.

 

 

 

슈퍼키

  • 튜플을 유일하게 식별할 수 있는 하나의 속성 또는 속성의 집합입니다.

튜플을 식별할 수 있으면 모두 슈퍼키가 될 수 있습니다. 

위 릴레이션의 경우 이름, 주소 속성은 동일한 값이 올 수 있고, 핸드폰의 경우 핸드폰이 없는 사람이 있을 수 있기 때문에 고객번호 또는 주민번호가 슈퍼키가 될 수 있습니다. 따라서 고객번호, 주민번호를 포함한 모든 속성의 집합이 슈퍼키가 될 수 있습니다.

(고객번호), (주민번호), (고객번호, 이름, 주민번호, 주소, 핸드폰), (고객번호, 이름) 등 슈퍼키가 여러 개가 될 수 있습니다.

 

 

 

후보키

  • 튜플을 유일하게 식별할 수 있는 속성의 최소 집합

위와 같은 주문 릴레이션에서 단일 속성으로는 튜플을 유일하게 식별하는 것이 불가능하기 때문에 2개의 속성을 합한 (고객번호, 도서번호)가 후보키가 됩니다. 이렇게 2개 이상의 속성으로 이루어진 키를 복합키(Composite Key)라고 합니다.

 

 

 

기본키

  • 여러 후보키 중 하나를 선정하여 대표로 삼는 키

후보키가 하나라면 해당 후보키를 기본키(Primary Key)로 사용하면 됩니다. 후보키가 여러 개 라면 릴레이션의 특성을 반영하여 하나만 선택하면 됩니다. 

위 도서 릴레이션에서는 도서번호, 도서이름이 후보키가 되고 두 속성 중 하나의 속성을 기본키로 선정하면 됩니다.

또한, 기본키는 릴레이션 스키마를 표현할 때 밑줄을 그어 표시합니다. (ex. 도서(도서번호, 도서이름, 출판사, 가격))

 

기본키 선정 시 고려 사항

  • 릴레이션 내 Tuple을 식별할 수 있는 고유한 값을 가져야 합니다.
  • NULL은 허용하지 않습니다.
  • 키 값의 변동이 일어나지 않아야 합니다.
  • 최대한 적은 수의 속성을 가져야 합니다.

기본키가 NULL 값이 되면 다른 튜플과 식별할 수 없으므로 안됩니다. 또한, 키 값의 변동이 일어나지 않아야 하는 이유는 기본키가 변경되면 릴레이션 내에서 기본키를 제외하고 나머지 속성이 같았던 튜플이 기본키를 바꿈으로 중복될 수 있기 때문입니다.

 

 

 

대체키

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

대체키는 기본키로 선정되지 않은 후보키입니다.

 

 

 

외래키

  • 다른 릴레이션의 기본키를 참조하는 속성

외래키를 통해서 다른 릴레이션과 관계를 맺을 수 있습니다. 

주문 릴레이션에서 고객 릴레이션의 기본키고객번호도서 릴레이션의 기본키도서번호를 참조하고 있습니다. 주문 릴레이션에서 고객번호, 도서번호외래키가 됩니다. 

또한, 외래키는 자기 자신의 릴레이션의 기본키를 외래키로 가질 수 있습니다.

이 때, 기본키가 이미 존재하고 있기 때문에 기본키를 참조하는 외래키는 NULL 값이 되어도 상관이 없습니다.


무결성 제약 조건

데이터 무결성이란 데이터베이스에 저장된 데이터의 일관성과 정확성을 지키는 것을 의미합니다.

이 무결성 제약 조건은 크게 3가지로 나뉘어집니다.

 

도메인 무결성 제약 조건

도메인 무결성 제약 조건은 도메인 제약(Domain constraint)이라고도 하며, 릴레이션 내의 튜플들이 각 속성의 도메인에 지정된 값만 가져야 한다는 조건입니다. 예를 들자면, varchar 형으로 선언된 이름이라는 column에는 정수형 Integer 값이 올 수 없는 경우를 이야기합니다.

 

 

개체 무결성 제약 조건

개체 무결성 제약 조건은 기본키 제약(Primary Key Constraint)이라고 합니다. 릴레이션은 기본키를 지정하고 그에 따른 무결성 원칙. 즉, 기본키는 NULL 값을 가져서는 안되며 릴레이션 내 오직 하나의 값만 존재해야 한다는 조건입니다. 기본키는 릴레이션 내에서 튜플들을 구별할 수 있게 해주는 속성이므로 자연스럽게 개체 무결성 제약조건이 등장하게 되었습니다.

 

 

참조 무결성 제약 조건

참조 무결성 제약조건은 외래키 제약(Foreign Key Constraint)라고도 하며, 릴레이션 간의 참조 관계를 선언하는 제약 조건입니다. 자식 릴레이션의 외래키는 부모 릴레이션의 기본키와 도메인이 동일해야 하며, 자식 릴레이션의 값이 변경될 때 부모 릴레이션의 제약을 받는다는 것입니다.

 

예를 들어 부모 릴레이션에 3001 학과 코드를 가진 학과를 추가하는 것은 문제가 없지만, 자식 릴레이션에 부모 릴레이션에 존재하지 않는 3001 학과 코드를 삽입하려고 하는 경우 문제가 발생합니다. 부모 릴레이션에서 삭제를 하는 경우 해당 키를 다른 릴레이션에서 사용하고 있을 수 있으므로 삭제에 제한이 걸리지만 자식 릴레이션은 바로 삭제할 수 있습니다. 수정 연산은 부모 릴레이션의 수정이 일어날 경우 삭제 옵션에 따라 처리된 후 문제가 없으면 다시 삽입 제약조건에 따라 처리됩니다.


관계 대수

관계 대수

  • 관계 대수: 릴레이션에서 원하는 결과를 얻기 위해 연산을 이용하여 질의하는 방법을 기술한 언어
    • 관계 대수는 어떤 데이터를 어떻게 찾는 지에 대한 처리 절차를 명시하는 절차적인 언어. DBMS 내부의 처리 언어로 사용됩니다.
  • 관계 해석: 어떤 데이터를 찾는 지만 명시하는 선언적인 언어로 관계 대수와 함께 관계 DBMS의 표준 언어인 SQL의 이론적 기반을 제공합니다.
  • 관계 대수와 관계 해석은 모두 관계 데이터 모델의 중요한 언어이며 동일한 표현 능력을 갖고 있습니다.

 

 

관계 대수 연산

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

 

 

조인

  • 두 릴레이션의 공통 속성을 기준으로 속성 값이 같은 튜플을 수평으로 결합하는 연산
  • 조인을 수행하기 위해서 두 릴레이션의 조인에 참여하는 속성이 서로 동일한 도메인으로 구성되어야 합니다.
  • 조인 연산의 결과는 공통 속성의 속성 값이 동일한 튜플만 반환합니다.
  • 세타 조인, 동등 조인, 자연 조인, 세미 조인, 외부 조인 등이 존재합니다.

세타 조인(theta join)은 조인에 참여하는 두 릴레이션의 속성 값을 비교하여 조건을 만족하는 튜플만 반환합니다.

 

동등 조인(equal join)은 세타 조인에서 ' = ' 연산자를 사용한 조인을 지칭합니다. 내부 조인(inner join)과 동일합니다.

 

자연 조인(natural join)은 동등 조인에서 조인에 참여한 속성이 두 번 나오지 않도록 두 번째 속성을 제거한 결과를 반환합니다.

자연 조인

 

외부 조인(outer join)은 자연 조인 시 조인에 실패한 튜플을 모두 보여주되, 값이 없는 대응 속성에는 NULL 값을 채워 반환합니다. 차집합 연산이라 생각하면 쉽습니다.

  • 왼쪽 외부조인(left outer join): 왼쪽 튜플 기준으로 자연 조인 시 실패한 튜플을 모두 보여주되 값이 없는 대응 속성에는 NULL 값을 채워서 반환합니다.
  • 오른쪽 외부조인(right outer join): 오른쪽 튜플을 기준으로 자연 조인 시 실패한 튜플을 모두 보여주되 값이 없는 대응 속성에는 NULL 값을 채워 반환합니다.
  • 완전 외부조인(full outer join): 양쪽 튜플 기준으로 자연 조인 시 실패한 튜플을 모두 보여주되 값이 없는 대응 속성에는 NULL 값을 채워서 반환합니다.

밴다이어그램으로 보는 외부 조인

 

이번엔 실제 테이블을 통해 자연 조인, 외부 조인이 어떻게 이루어지는지 아래 그림으로 살펴보겠습니다.

테이블로 살펴보는 외부 조인

 

세미 조인(semi join)은 자연 조인을 한 후 두 릴레이션 중 한쪽 릴레이션의 결과만 반환하며 기호에서 닫힌 쪽 릴레이션의 튜플만 반환합니다.

세미 조인의 예

 

 

디비전

  • 릴레이션의 속성 값의 집합으로 연산을 수행합니다.
  • 형식: R ÷ S

디비전의 예시


오라클로 배우는 데이터베이스 개론과 실습

1장. [DB]데이터베이스 시스템

2장. [DB]관계 데이터 모델

3장. [DB]SQL 기초

4장. [DB]SQL 고급

5장. [DB]데이터베이스 프로그래밍

6장. [DB]데이터 모델링

7장. [DB]정규화(Normalization)

8장. [DB]트랜잭션, 동시성 제어, 회복

참고

https://mangkyu.tistory.com/21

 

[Database] 2. 관계데이터모델

[ 본 사진은 쉽게 배우는 오라클로 배우는 데이터베이스 개론과 실습 ppt에서 캡처했습니다. ] 1. 관계 데이터 모델의 개념[ 릴레이션 ]릴레이션: 행과 열로 구성된 테이블속성(Attribute): 세로 값으

mangkyu.tistory.com

 

'Database' 카테고리의 다른 글

[DB]내장 함수  (0) 2024.09.11
[DB]SQL 기초  (0) 2024.09.04
[DB]데이터베이스 시스템  (0) 2024.09.03
[DB]REDO와 UNDO로 데이터 복구하기  (0) 2024.08.30
[DB]CLOB과 BLOB  (0) 2024.08.28