DB/단원 정리

CHAPTER 02 관계 데이터 모델

YJ_ma 2022. 9. 24. 21:22

01 관계 데이터 모델의 개념

릴레이션의 개념

릴레이션(relation) : 행과 열로 구성된 테이블

relation(릴레이션)과 관련된 한글 용어

 릴레이션이란?

첫 번째 행(1, 축구의 역사, 굿스포츠, 7000)의 경우 네 개의 집합에서 각각 원소 한 개씩 선택하여 만들어진 것으로

이 원소들이 관계(relationship)를 맺음

▶ 관계(relationship)

① 릴레이션 내에서 생성되는 관계 : 릴레이션 내 데이터들의 집합

② 릴레이션 간에 생성되는 관계 : 릴레이션 간의 관계, 릴레이션을 식별 가능한 값을 이용해 표현,

관계 데이터 모델을 다른 데이터 모델과 구분하는 특징

 

 

- 릴레이션 : 도서, 주문, 고객

- 각 릴레이션의 속성관계를 알 수 있다.

ex, 도서 릴레이션의 속성은 도서번호, 도서이름, 출판사, 가격이다.

ex, 도서 릴레이션의 도서번호가 주문 릴레이션의 도서번호로 중복 포함되고 있다. 

 

 

 

릴레이션 스키마와 인스턴스(중요!!!)

스키마(schema) : 테이블의 헤더에 나타나며 각 데이터의 특징을 나타내는 속성, 자료타입 등의 정보를 담고 있다.

인스턴스(instance) : 정의된 스키마에 따라 테이블에 실제로 저장되는 데이터의 집합

 릴레이션 스키마

- 속성(attribute) : 릴레이션 스키마의 열 

ex,도서 릴레이션의 속성은 도서번호, 도서이름, 출판사, 가격이다. 

- 도메인(domain) : 속성이 가질 수 있는 값의 집합

ex, 도서번호, 가격 : integer / 출판사, 도서이름 : String

- 차수(degree) : 속성의 개수

ex, 도서 릴레이션의 차수는 4개이다.

 

스키마의 표현

릴레이션 이름(속성1 : 도메인1, 속성2 : 도메인2, 속성3 : 도메인3 …)

ex)

도서 (도서번호, 도서이름, 출판사, 가격)

도서 (도서번호:integer, 도서이름:char(40), 출판사:char(40), 가격:integer))

 

릴레이션 인스턴스

- 투플(tuple) : 릴레이션의 행, 중복허용x

ex, 도서 릴레이션의 세 번째 투플은 도서번호가 3, 도서이름은 '축구의 이해', 출판사는 '대한미디어',

가격은 22,000원이다.

- 카디날리티(cardinality) : 투플의 수, 투플의 삽입, 삭제, 수정 등에 따라 수시로 변한다.

ex, 도서 릴레이션의 카디날리티는 5이다.

 

투플이 가지는 속성의 개수는 릴레이션 스키마의 차수와 동일하고,

릴레이션 내의 모든 투플들은 서로 중복되지 않아야 함

 릴레이션의 특징

① 속성은 단일 값을 가진다

• 각 속성의 값은 도메인에 정의된 값만을 가지며 그 값은 모두 단일 값이여야 함.

② 속성은 서로 다른 이름을 가진다

• 속성은 한 릴레이션에서 서로 다른 이름을 가져야만 함.

③ 한 속성의 값은 모두 같은 도메인 값을 가진다

• 한 속성에 속한 열은 모두 그 속성에서 정의한 도메인 값만 가질 수 있음

④ 속성의 순서는 상관없다

• 속성의 순서가 달라도 릴레이션 스키마는 같음.

• 예) 릴레이션 스키마에서 (이름, 주소) 순으로 속성을 표시하거나 (주소, 이름) 순으로 표시하여도 상관없음.

⑤ 릴레이션 내의 중복된 투플은 허용하지 않는다

• 하나의 릴레이션 인스턴스 내에서는 서로 중복된 값을 가질 수 없음. 즉 모든 투플은 서로 값이 달라야 함.

⑥ 투플의 순서는 상관없다

• 투플의 순서가 달라도 같은 릴레이션임. 관계 데이터 모델의 투플은 실제적인 값을 가지고 있으며 이 값은 시간이 지남에 따라 데이터의 삭제, 수정, 삽입에 따라 순서가 바뀔 수 있음.

관계데이터모델

관계 데이터 모델은 데이터를 2차원 테이블 형태인 릴레이션으로 표현함.

릴레이션에 대한 제약조건(constraints)과 관계 연산을 위한 관계대수(relational algebra)를 정의함.

릴레이션 : ex, 도서 정보를 담은 '도서 릴레이션', 고객 정보를 담은 '고객 릴레이션', 주문 내역을 담은 '주문 릴레이션'

제약 조건 : 각 릴레이션에 저장된 데이터 값을 가져야 하는 제약

ex, 나이는 음수가 되면 안된다.

ex, 주문 릴레이션의 고객번호는 고객 릴레이션에서만 참조해야한다.

관계 연산 : 릴레이션을 다루는 연산 규칙

ex, 주문릴레이션과 고객릴레이션 등을 조작하여 특정 고객의 주문내역을 검색한다.

 

02 무결성 제약조건

키(key)

특정 투플을 식별할 때 사용하는 속성 혹은 속성의 집합

- 릴레이션은 중복된 투플을 허용하지 않기 때문에 각각의 투플에 포함된 속성들 중 어느 하나(혹은 하나 이상)는 값이 달라야한다. 즉 키가 되는 속성(혹은 속성의 집합) 은 반드시 값이 달라서 투플들을 서로 구별할 수 있어야 한다.

- 키는 릴레이션 간의 관계를 맺는 데도 사용된다. 각 릴레이션의 투플을 유일하게 식별하는 장치이며 동시에 각 릴레이션 간의 관계를 말해주는 연결고리이다. 

 슈퍼키(super key)

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

투플을 유일하게 식별할 수 있는 값이면 모두 슈퍼키가 될 수 있음

(고객 릴레이션 예)

- 고객번호 : 고객별로 유일한 값이 부여되어 있기 때문에 투플을 식별할 수 있음.

- 이름 : 동명이인이 있을 경우 투플을 유일하게 식별할 수 없음.

- 주민번호 : 개인별로 유일한 값이 부여되어 있기 때문에 투플을 식별할 수 있음.

- 주소 : 가족끼리는 같은 정보를 사용하므로 투플을 식별할 수 없음.

- 핸드폰 : 한 사람이 여러 개의 핸드폰을 사용할 수 있고 반대로 핸드폰을 사용하지 않는 사람이 있을 수 있기 때문에 투플을 식별할 수 없음

 

고객 릴레이션은 고객번호와 주민번호를 포함한 모든 속성의 집합슈퍼키가 됨.

EX) (주민번호), (주민번호, 이름), (주민번호, 이름, 주소), (주민번호, 이름, 핸드폰),

(고객번호), (고객번호, 이름, 주소), (고객번호, 이름, 주민번호, 주소, 핸드폰) 등

 

후보키(candidate key)

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

(주문 릴레이션 예)

- 고객번호 : 한 명의 고객이 여러 권의 도서를 구입할 수 있으므로 후보키가 될 수 없음.

고객번호가 1인 박지성 고객은 세 번의 주문 기록이 있으므로 투플을 유일하게 식별할 수 없음.

- 도서번호 : 도서번호가 2인 ‘축구아는 여자’는 두 번의 주문 기록이 있으므로 투플을 유일하게 식별할 수 없음.

- 주문 릴레이션의 후보키는 2개의 속성을 합한 (고객번호, 도서번호)가 됨.

→ 한명의 고객이 동일한 도서 구입가능하면 후보키 될 수 없음

참고로 이렇게 2개 이상의 속성으로 이루어진 키복합키(composite key)라고 한다.

 

기본키(Primary Key,  PK)

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

- 후보키가 하나뿐이라면 그 후보키를 기본키로 사용하면 되고 여러 개라면 릴레이션 의 특성을 반영하여 하나를 선택하면 된다.

기본키 제약조건

① 릴레이션 내 투플을 식별할 수 있는 고유한 값을 가져야 함. 

② NULL 값은 허용하지 않음. 

③ 키 값의 변동이 일어나지 않아야 함. 

 

④ 최대한 적은 수의 속성을 가진 것이라야 함.

⑤ 향후 키를 사용하는 데 있어서 문제 발생 소지가 없어야 함.

 

 

릴레이션 스키마를 표현할 때 기본키밑줄을 그어 표시한다.

릴레이션 이름(속성1, 속성2, …. 속성N)

ex, 고객(고객번호, 이름, 주민번호, 주소, 핸드폰)

도서(도서번호, 도서이름, 출판사, 가격)

 

대리키(surrogate key)

기본키가 보안을 요하거나, 여러 개의 속성으로 구성되어 복잡하거나, 마땅한 기본키 가 없을 때는 일련번호 같은 가상의 속성을 만들어 기본키로 삼는 경우가 있음. 이러 한 키를 대리키(surrogate key) 혹은 인조키(artificial key)라고 함.

- 대리키는 DBMS나 관련 소프트웨어에서 임의로 생성하는 값으로 사용자가 직관적으로 그 값의 의미를 알 수 없음.

 

 

 

 

 

주문 릴레이션은 (고객번호, 도서번호)의 복합키를 사용하여 투플을 식별한다. 매번 기본키 (고객번호, 도서번호)를 사용하면 복잡하고 불편하므로 '주문번호'라는 대리키를 생성하고 기본키로 설정하여 불편함을 해소할 수 있다.

 

 

 대리키(alternate key)

대체키(alternate key)는 기본키로 선정되지 않은 후보키를 말함.

ex, 고객 릴레이션의 경우 고객번호와 주민번호 중 고객번호를 기본키로 정하면 주민 번호가 대체키가 됨.

 

외래키(Foreign Key, FK)

다른 릴레이션의 기본키를 참조하는 속성을 말함.

다른 릴레이션의 기본키를 참조하여 관계 데이터 모델의 특징인 릴레이션 간의 관계(relationship)를 표현함.

 

외래키 제약조건

① 관계 데이터 모델의 릴레이션 간의 관계를 표현함.

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

③ 참조하고(외래키) 참조되는(기본키) 양쪽 릴레이션의 도메인은 서로 같아야 함.

④ 참조되는(기본키) 값이 변경되면 참조하는(외래키) 값도 변경됨.

⑤ NULL 값과 중복 값 등이 허용됨.

⑥ 자기 자신의 기본키를 참조하는 외래키도 가능함.

⑦ 외래키가 기본키의 일부가 될 수 있음.

릴레이션 간의 참조 관계

외래키 사용 시 참조하는 릴레이션과 참조되는 릴레이션이 꼭 다른 릴레이션일 필요 는 없음.

자기 자신의 기본키를 참조할 수도 있음.

키 - 내용 요약

 

무결성 제약조건(중요!!!!)

데이터 무결성(integrity, 無缺性) : 데이터베이스에 저장된 데이터의 일관성과 정확성을 지키는 것을 말함.

① 도메인 무결성 제약조건

도메인 제약(domain constraint)이라고도 하며,

릴레이션 내의 투플들이 각 속성의 도메인에 지정된 값만을 가져야 한다는 조건, 속성값과 관련된 무결성

ex, 주문 릴레이션에서 주문일자는 날짜 데이터만 사용한다.

SQL 문에서 데이터 형식(type), 널(null/not null), 기본 값(default), 체크(check) 등을 사용하여 지정할 수 있음.

 

② 개체 무결성 제약조건

기본키 제약(primary key constraint)이라고도 함.

• 릴레이션은 기본키를 지정하고 그에 따른 무결성 원칙

즉, 기본키는 NULL 값을 가져서는 안 되며 릴레이션 내에 오직 하나의 값만 존재해야 한다는 조건임.

• 기본키 값이 같거나 NULL값을 가지면 안되며 삽입, 수정할 때 적용되고 삭제와는 무관하다.

 

③ 참조 무결성 제약조건

외래키 제약(foreign key constraint)이라고도 하며, 릴레이션 간의 참조 관계를 선언하는 제약조건

• 참조되는(제공하는) 릴레이션을 부모 릴레이션, 참조하는(제공받는) 릴레이션을 자식 릴레이션이라고 한다.

• 자식 릴레이션의 외래키는 부모 릴레이션의 기본키와 도메인이 동일해야 하며, 자식 릴레이션의 값이 변경될 때 부모 릴레이션의 제약을 받는다.

 

 무결성 제약조건의 수행

① 개체 무결성 제약조건

- 삽입 : 기본키 값이 같으면 삽입이 금지됨.

- 수정 : 기본키 값이 같거나 NULL로도 수정이 금지됨.

- 삭제 : 특별한 확인이 필요하지 않으며 즉시 수행함.

② 참조 무결성 제약조건

- 학과(부모 릴레이션) : 투플 삽입한 후 수행하면 정상적으로 진행

- 학생(자식 릴레이션) : 참조받는 테이블에 외래키 값이 없으므로 삽입이 금지

삭제

- 학과(부모 릴레이션) : 참조하는 테이블을 같이 삭제할 수 있어서 금지하거나 다른 추가 작업이 필요함.

- 학생(자식 릴레이션) : 바로 삭제 가능함. 

※ 부모 릴레이션에서 투플을 삭제할 경우 참조 무결성 조건을 수행하기 위한 고려사항

① 즉시 작업을 중지

② 자식 릴레이션의 관련 투플을 삭제

③ 초기에 설정된 다른 어떤 값으로 변경

④ NULL 값으로 설정

 

수정

- 삭제와 삽입 명령이 연속해서 수행됨.

- 부모 릴레이션의 수정이 일어날 경우 삭제 옵션에 따라 처리된 후 문제가 없으면 다시 삽입 제약조건에 따라 처리됨.

 

03 관계대수

관계대수(relational algebra, 關係代數) : 릴레이션에서 원하는 결과를 얻기 위해 수학의 대수와 같은 연산을 이용하여 질의하는 방법을 기술하는 언어

관계대수와 관계해석

- 관계대수 : 어떤 데이터를 어떻게 찾는지에 대한 처리 절차를 명시하는 절차적인 언어이며, DBMS 내부의 처리 언어로 사용됨

- 관계해석 : 어떤 데이터를 찾는지 명시하는 선언적인 언어로 관계대수와 함께 관계 DBMS의 표 준 언어인 SQL의 이론적인 기반을 제공함

→ 관계대수와 관계해석은 모두 관계 데이터 모델의 중요한 언어이며 실제 동일한 표현 능력을 가지고 있음.

 

 관계대수연산자(중요!!!!) - 개명X

순수 관계연산 : 셀렉션, 프로젝션, 조인, 디비전, 개명

일반 집합연산 : 합집합, 교집합, 차집합, 카티션 프로덕트

 

 관계대수식

관계대수릴레이션 간 연산을 통해 결과 릴레이션을 찾는 절차를 기술한 언어로,

이 연산을 수행 하기 위한 식을 관계대수식(relational algebra expression)이라고 함.

관계대수식은 대상이 되는 릴레이션 연산자로 구성되며, 결과는 릴레이션으로 반환됨.

반환된 릴 레이션은 릴레이션의 모든 특징을 따름.

- 단항 연산자 : 연산자<조건> 릴레이션 

- 이항 연산자 : 릴레이션1 연산자<조건> 릴레이션

 

셀렉션(selection)

릴레이션의 투플을 추출하기 위한 연산임. 하나의 릴레이션을 대상으로 하는 단항 연산자며,

찾고자 하는 투플의 조건(predicate)을 명시하고 그 조건에 만족하는 투플을 반환함.

- 형식 : σ<조건> (R) (R은 릴레이션, σ 는 그리스 문자이며 대문자는 Σ )

 

질의 2-1 마당서점에서 판매하는 도서 중 8,000원 이하인 도서를 검색하시오

 

 

σ 가격<=8000 (도서)

 

 

 

 

 

 

 

 

 

 

 셀렉션(selection)의 확장

- 형식 : σ<복합조건> (R) (R은 릴레이션, σ 는 그리스 문자이며 대문자는 Σ )

여러 개의 조건을 ∧(and), ∨ (or), ┑(not) 기호를 이용하여 복합조건을 표시할 수 있다.

예를 들어, “가격이 8,000원 이하이고, 도서번호가 3 이상인 책을 찾아라”는 질의는 다음과 같이 표현한다

σ(가격<=8000 ∧ 도서번호 >=3) (도서)

 

프로젝션(projection)

릴레이션의 속성을 추출하기 위한 연산으로 단항 연산자임.

- 형식 : π<속성리스트> (R) (R은 릴레이션, π 는 그리스 문자이며 대문자는 Π )

 

질의 2-2 신간도서 안내를 위해 고객의 (이름, 주소, 핸드폰)이 적힌 카탈로그 주소록을 만드시오.

 

 

 

 

• π 이름, 주소, 핸드폰 (고객)

일부분만 추출할 경우 중복이 발생할 수 있으므로

중복되는 부분은 제거하여 한번만 표시한다.

 

 

 

 

 

 

집합연산

집합연산 : 합집합, 교집합, 차집합, 카티션 프로덕트 

- 두 개의 릴레이션을 대상으로 하는 이항 연산자이다.

합집합, 차집합, 교집합은 두 릴레이션의 차수 및 도메인과 속성의 순서가 동일해야한다.

합병가능(union compatible) : 각 릴레이션의 속성 수가 같고 순서도 같아야하며 각각 동일한 도메인으로 대응되어야한다.

 

합집합(union)

두 개의 릴레이션을 합하여 하나의 릴레이션을 반환함.

이 때 두 개의 릴레이션은 서로 같은 속성 순서와 도메인을 가져야 함.

- 형식 : R ∪ S

 

질의 2-3 마당서점은 지점A와 지점B가 있다. 두 지점의 도서는 각 지점에서 관리하며 릴레이션 이름은 각각 도서A, 도서B다. 마당서점의 도서를 하나의 릴레이션으로 보이시오.

 

• 도서A ∪ 도서B

 

 

 

 

 

 

교집합(intersection)

합병가능한 두 릴레이션을 대상으로 하며, 두 릴레이션이 공통으로 가지고 있는 투플을 반환함.

- 형식 : R ∩ S

 

질의 2-4 마당서점의 두 지점에서 동일하게 보유하고 있는 도서 목록을 보이시오

 

 

 

 도서A ∩ 도서B

 

 

 

 

 

차집합(difference)

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

- 형식 : R - S

 

질의 2-5 마당서점 두 지점 중 지점 A에서만 보유하고 있는 도서 목록을 보이시오.

 

 

 

 도서A - 도서B

 

 

 

 

 

 

카티션 프로덕트(cartesian product)

두 릴레이션을 연결시켜 하나로 합칠 때 사용함. 결과 릴레이션은 첫 번째 릴레이션의 오른쪽에 두 번째 릴레이션의 모든 투플을 순서대로 배열하여 반환함. 결과 릴레이션의 차수두 릴레이 션의 차수의 합이며,

카디날리티는 두 릴레이션의 카디날리티의 곱임.

- 형식 : R × S 

질의 2-6 고객 릴레이션과 주문 릴레이션의 카티전 프로덕트를 구하시오

(결과가 많으므로 투플을 일부 삭제한 릴레이션을 사용함).

 

 

 

 

고객 × 주문

 

 

 

 

 

 

 

 

 

 

 

조인(join)

두 릴레이션의 공통 속성을 기준으로 속성 값이 같은 투플을 수평으로 결합하는 연산

조인을 수행하기 위해서는 두 릴레이션의 조인에 참여하는 속성이 서로 동일한 도메인으로 구성되어야 함.

조인 연산의 결과는 공통 속성의 속성 값이 동일한 투플만을 반환함.

조인 연산의 구분

세타조인(theta join, θ)

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

- 세타조인의 조건은 {=, ≠, ≤, ≥, <, >} 중 하나가 됨.

 

동등조인(equi join)

세타조인에서 = 연산자를 사용한 조인을 말함. 보통 조인 연산이라고 하면 동등조인을 지칭함.

질의 2-7 고객과 고객의 주문 사항을 모두 보이시오.

 

자연조인(natural join) - 중요!!!

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

질의 2-8 고객과 고객의 주문 사항을 모두 보여주되 같은 속성은 한 번만 표시하시오.

 

외부조인(outer join)과 세미조인(semi join)

외부조인(outer join)

자연조인 시 조인에 실패한 투플을 모두 보여주되 값이 없는 대응 속성에는 NULL 값을 채워서 반환

- 모든 속성을 보여주는 기준 릴레이션 위치에 따라 왼쪽(left) 외부조인, 오른쪽(right) 외부조인, 완전 (full) 외부조인으로 나뉨.

질의 2-9 마당서점의 고객과 고객의 주문 내역을 보이시오.

① 고객 기준으로 주문내역이 없는 고객도 모두 보이시오.

② 주문내역이 없는 고객과, 고객 릴레이션에 고객번호가 없는 주문을 모두 보이시오.

③ 주문내역 기준으로 고객 릴레이션에 고객번호가 없는 주문도 모두 보이시오.

 

세미조인(semi join)

자연조인을 한 후 두 릴레이션 중 한쪽 릴레이션의 결과만 반환하며, 기호에서 닫힌 쪽 릴레이 션의 투플만 반환함.

질의 2-10 마당서점의 고객 중 주문 내역이 있는 고객의 고객 정보를 보이시오

 

 

-> 처음에 자연조인의 예시처럼 나온다. 거기서 주문 릴레이션을 빼면 6가지가 나오는데, 중복을 제거하므로 3가지가 나오게된다.

 

 

 

 

 

 

디비전(division)

릴레이션의 속성 값의 집합으로 연산을 수행함

- 형식 : R ÷ S

 

관계대수의 사용 예제

질의 2-11 마당서점의 도서 중 가격이 8,000원 이하인 도서이름과 출판사를 보이시오.

1. 마당서점의 지점이 하나인 경우

π도서이름, 출판사 (σ가격<=8000 도서)

 

2. 마당서점의 지점이 둘인 경우

(A 지점, B지점) π도서이름, 출판사 ((σ가격<=8000 도서A) ∪ (σ가격<=8000 도서B))

π도서이름, 출판사σ가격<=8000(도서A도서B)

질의 2-12 마당서점의 박지성 고객의 거래 내역 중 주문번호, 이름, 가격을 보이시오.

카티전 프로덕트를 사용한 연산

π주문.주문번호, 고객.이름, 주문.판매가격 (σ고객.고객번호=주문.고객번호 AND 고객.이름=‘박지성’(고객×주문))

조인을 사용한 연산

 

'DB > 단원 정리' 카테고리의 다른 글

마당서점 데이터베이스  (0) 2022.10.08
CHAPTER 01 데이터베이스 시스템  (0) 2022.09.24