66. 관계대수 및 관계해석

alpaka·2024년 1월 17일
0

정보처리기사

목록 보기
70/161
post-thumbnail

관계대수의 개요

  • 관계대수는 관계형 데이터베이스에서 원하는 정보와 그 정보를 검색하기 위해서 어떻게 유도하는가를 기술하는 절차적인 언어이다.
  • 관계대수는 릴레이션을 처리하기 위해 연산자와 연산규칙을 제공하는 언어로 피연산자가 릴레이션이고, 결과도 릴레이션이다.
  • 질의에 대한 해를 구하기 위해 수행해야 할 연산의 순서를 명시한다.
  • 관계대수에는 관계 데이터베이스에 적용하기 위해 특별히 개발한 순수 관계 연산자와 수학적 집합 이론에서 사용하는 일반 집합 연산자가 있다.
  • 순수 관계연산자: Select, Project, Join, Division
  • 일반 집합 연산자 : UNION(합집합), INTERSECTION(교집합), DIFFERENCE(차집합), CARTESIAN PRODUCT(교차곱)

Select

  • Select는 릴레이션에 존재하는 튜플 중에서 선택 조건을 만족하는 튜플의 부분집합을 구하여 새로운 릴레이션을 만드는 연산이다.
  • 릴레이션의 행(가로)에 해당하는 튜플을 구하는 것이므로 수평 연산이라고도 한다.
  • 연산자의 기호는 그리스 문자 시그마(σ)를 사용한다.
  • 표기 형식: σ<조건>(R)σ_{<조건>}(R)
    • R은 릴레이션 이름이다.
    • 조건에서는 =, ≠, <, ≤, >, ≥ 등의 기호를 사용한 비교 연산이 허용되며, AND(∧), OR(∨), NOT(¬) 등의 논리 연산자를 사용하여 여러 개의 조건들을 하나의 조건으로 결합시킬 수도 있다.
  • 예제: σAvg90(성적)σ_{Avg≥90} (성적) : <성적> 릴레이션에서 '평균'(Avg)이 90점 이상인 튜플들을 추출하시오.

    <성적>

    NameKorEngMatTotAvg
    고회식1009010029096.6
    김은소808010026086.6
    최미경100708025083.3
    김준용901009028093.3
    윤정희85959027090.0

    <정답>

    NameKorEngMatTotAvg
    고회식1009010029096.6
    김준용901009028093.3
    윤정희85959027090.0

Project

  • Project는 주어진 릴레이션에서 속성 리스트(Attribute List)에 제시된 속성 값만을 추출하여 새로운 릴레이션을 만드는 연산이다. 단 연산 결과에 중복이 발생하면 중복이 제거된다.
  • 릴레이션의 열(세로)에 해당하는 Attribute를 추출하는 것이므로 수직 연산자라고도 한다.
  • 연산자의 기호는 그리스 문자 파이(π)를 사용한다.
  • 표기 형식: π<속성리스트>(R)π_{<속성리스트>}(R)
    • R은 릴레이션 이름이다.
  • 예제: πName.Avg(성적)π_{Name.Avg}(성적): <성적> 릴레이션에서 'Name'과 'Avg' 속성을 추출하시오.

    <성적>

    NameKorEngMatTotAvg
    고회식1009010029096.6
    김은소808010026086.6
    최미경100708025083.3
    김준용901009028093.3
    윤정희85959027090.0

    <정답>

    NameAvg
    고회식96.6
    김은소86.6
    최미경83.3
    김준용93.3
    윤정희90.0

Join

  • Join은 공통 속성을 중심으로 두 개의 릴레이션을 하나로 합쳐서 새로운 릴레이션을 만드는 연산이다.
  • Join의 결과로 만들어진 릴레이션의 차수는 조인된 두 릴레이션의 차수를 합한 것과 같다.
  • Join의 결과는 Cartesian Product(교차곱)를 수행한 다음 Select를 수행한 것과 같다.
  • 연산자의 기호는 를 사용한다.
  • 표기 형식: R키속성r=키속성sSR⋈_{키속성r=키속성s}S
    • 키 속성 r은 릴레이션 R의 속성이고, 키 속성 s는 릴레이션 S의 속성이다.
  • 예제; 성적No=No학적부성적⋈_{No=No}학적부:<성적> 릴레이션과 <학적부> 릴레이션을 'No'속성을 기준으로 합치시오.

    <성적>

    NoNameKorEngMatTotAvg
    9801고회식1009010029096.6
    9802김은소808010026086.6
    9803최미경100708025083.3
    9804김준용901009028093.3
    9805윤정희85959027090.0

    <학적부>

    NoAddr
    9801망원동
    9802서교동
    9803성산동
    9804합정동
    9805공덕동

    <정답>

    성적.NoNameKorEngMatTotAvg학적부.NoAddr
    9801고회식1009010029096.69801망원동
    9802김은소808010026086.69802서교동
    9803최미경100708025083.39803성산동
    9804김준용901009028093.39804합정동
    9805윤정희85959027090.09805공덕동
  • 자연 조인(Natural Join)
  • 조인 조건이 '='일 때 동일한 속성이 두 번 나타나게 되는데, 이중 중복된 속성을 제거하여 같은 속성을 한 번만 표기하는 방법을 자연(Natural) 조인이라고 합니다.
  • 예를 들어, 어제의 Join 연산 결과에는 조인에 사용된 'No' 속성이 두 번 표기되었는데 이것은 의미상 아무런 도움을 주지 않습니다. 이런 경우 다음과 같은 자연 조인 연산을 통해 'No' 속성이 한 번만 표기되게 할 수 있습니다.
    성적No학적부성적⋈_{No}학적부
    ※ 자연 조인이 성립되려면 두 릴레이션의 속성명과 도메인이 같아야 합니다.

Division

  • Division은 X⊃Y인 두 개의 릴레이션 R(X)와 S(Y)가 있을 때, R의 속성이 S의 속성 값을 모두 가진 튜플에서 S가 가진 속성을 제외한 속성만을 구하는 연산이다.
  • 연산자의 기호는 ÷를 사용한다.
  • 표기 형식: R [속성r ÷ 속성s] S
    • 속성 r은 릴레이션 R의 속성, 속성 s는 릴레이션 S의 속성 속성 과 속성 s는 동일 속성값을 가지는 속성이어야 한다.

<구입자>

번호이름구입품코드
1고회식A
1고회식B
2김준용A
2김준용B
2김준용C
4윤정희C

<생산품1>

생산품코드
A
B

<생산품2>

이름생산품코드
고회식A
고회식B
  • 예제1: 구입자[구입품코드 ÷ 생산품코드]생산품1의 결과는 다음과 같다.
    • <구입자> 릴레이션에서 '코드' 속성을 제외하고 '번호'와 '이름'을 추출한다. 단 <생산품1> 릴레이션의 모든 튜플과 연관되어 있는 튜플만 추출한다.

      번호이름
      1고회식
      2김준용
  • 예제2: 구입자[이름.구입품코드 ÷ 이름.생산품코드]생산품2의 결과는 다음과 같다.
    • <구입자> 릴레이션에서 '이름', '구입품코드' 속성을 제외하고 번호만 추출한다. 단 <생산품2> 릴레이션의 모든 튜플과 연관되어 있는 튜플만 추출한다.

      번호
      2

일반 집합 연산자

  • 일반 집합 연산자는 수학적 집합 이론에서 사용하는 연산자로서 릴레이션 연산에도 그대로 적용할 수 있다.
  • 일반 집합 연산자 중 합집합(UNION), 교집합(INTERSECTION), 차집합(DIFFERENCE)을 처리하기 위해서는 합병 조건을 만족해야 한다.
  • 합병 가능한 두 릴레이션 R과 S가 있을 때 각 연산의 특징을 요약하면 다음과 같다.

    연산자기능 및 수학적 표현카디널리티
    합집합
    UNION
    U
    - 두 릴레이션에 존재하는 튜플의 합집합을 구하되, 결과로 생성된 릴레이션에서 중복되는 튜플은 제거되는 연산이다.
    - R ∪ S = {tㅣt∈R ∨ t ∈ S}
    ※ t는 릴레이션 R 또는 S에 존재하는 튜플이다.
    - ㅣR∪Sㅣ≤ㅣRㅣ+ㅣSㅣ
    - 합집합의 카디널리티는 두 릴레이션 카디널리티의 합보다 크지 않다.
    교집합
    INTERSECTION
    - 두 릴레이션에 존재하는 튜플의 교집합을 구하는 연산이다.
    - R ∩ S = {tㅣt∈R ∧ t ∈ S}
    ※ t는 릴레이션 R 그리고 S에 동시에 존재하는 튜플이다.
    - ㅣR∩Sㅣ≤ MIN{ㅣRㅣ,ㅣSㅣ}
    - 교집합의 카디널리티는 두 릴레이션 중 카디널리티가 적은 릴레이션의 카디널리티보다 크지 않다.
    차집합
    DIFFERENCE
    -
    - 두 릴레이션에 존재하는 튜플의 차집합을 구하는 연산이다.
    - R - S = {tㅣt ∈ R ∧ t ∉ S}
    ※ t는 릴레이션 R에는 존재하고 S에 없는 튜플이다.
    - ㅣR-Sㅣ ≤ ㅣRㅣ
    - 차집합의 카디널리티는 릴레이션 R의 카디널리티 보다 크지 않다.
    교차곱
    CARTESIAN PRODUCT
    x
    - 두 릴레이션에 있는 튜플들의 순서쌍을 구하는 연산이다.
    - R x S = {r * sㅣr ∈ R ∧ s ∈ S}
    ※ r은 R에 존재하는 튜플이고 는 S에 존재하는 튜플이다.
    - ㅣR X Sㅣ = ㅣRㅣ X ㅣSㅣ
    - 교차곱의 디그리는 두 릴레이션의 디그리를 더한 것과 같고, 카디널리티는 두 릴레이션의 카디널리티를 곱한 것과 같다.

    <사원>

    사번이름
    1고회식
    2김준용

<직원>

사번이름
2김준용
3윤정희
  • 예제 1: π이름(사원)π_{이름}(사원) U π이름(직원)π_{이름}(직원) : <사원> 릴레이션과 <직원> 릴레이션에서 '이름'을 추출한 것의 합집합을 구한다.

    이름
    고회식
    김준용
    윤정희
  • 예제 2: π이름(사원)π_{이름}(사원)π이름(직원)π_{이름}(직원): <사원> 릴레이션과 <직원> 릴레이션에서 '이름'을 추출한 것의 교집합을 구한다.

    이름
    김준용
  • 예제 3: π이름(사원)π_{이름}(사원) - π이름(직원)π_{이름}(직원): <사원> 릴레이션과 <직원> 릴레이션에서 '이름'을 추출한 것의 차집합을 구한다.

    이름
    고회식
  • 예제 4: π이름(사원)π_{이름}(사원) X π이름(직원)π_{이름}(직원): <사원> 릴레이션과 <직원> 릴레이션에서 '이름'을 추출한 것의 교차곱을 구한다.

    사원.이름직원.이름
    고회식김준용
    고회식윤정희
    김준용김준용
    김준용윤정희

관계해석(Relational Calculus)

  • 관계해석은 관계 데이터 모델의 제안자인 코드(E. F. Codd)가 수학의 Predicate Calculus(술어 해석)에 기반을 두고 관계 데이터베이스를 위해 제안했다.
  • 관계해석은 관계 데이터의 연산을 표현하는 방법으로, 원하는 정보를 정의할 때는 계산 수식을 사용한다.
  • 관계해석은 원하는 정보가 무엇이라는 것만 정의하는 비절차적 특성을 지닌다.
  • 튜플 관계해석과 도메인 관계해석이 있다.
  • 기본적으로 관계해석과 관계대수는 관계 데이터베이스를 처리하는 기능과 능력면에서 동등하며, 관계대수로 표현한 식은 관계해석으로 표현할 수 있다.
  • 질의어로 표현한다.
  • 주요 논리 기호

    기호구성 요소설명
    전칭 정량자가능한 모든 튜플에 대하여(For All)
    존재 전량자하나라도 일치하는 튜플이 있음(There Exists)
profile
alpaka의 자격증 공부장

0개의 댓글

관련 채용 정보