2. relational model - additional relational algebra

Yona·2021년 10월 26일
0

🌙 CS_DataBase

목록 보기
5/10

additional relational algebra

  • 이미 살펴본 기본 확장 대수(relational algebra)를 이용하여 표현이 가능하지만 (=관계대수의 표현력(expressive power)을 확장시키지는 않음)
  • 다만 사용 편리성을 제공한다.
  • 종류
    - Assignment \leftarrow
    • Set intersection \cap
    • Natural join \bowtie
    • Outer join
    • Division

Assignment \leftarrow

  • 복잡한 질의문을 작성할 때 중간 결과 표현을 임시로 저장
    - 할당 연산을 하면서 재명명 연산자를 함께 사용하면 중간 결과의 관계 및 속성 이름을 원하는 것으로 변경하면서 할당할 수 있다.

Set Intersection \cap

  • 2회 차집합 연산 적용으로 표현이 가능하므로 확장 관계 연산자
    - r \cap s = r – (r – s)
  • 다른 set 연산자와 조건 동일
    - 입력 관계에 대한 속성 개수가 같고
    - 대응되는 속성의 데이터 타입이 상호 호환되어야

Natural Join \bowtie

  • 수행절차
    -1) 카티시안곱을 수행
    -2) 조인 조건을 이용하여 선택 연산을 수행하고
    -3) 조인 조건에 언급된 속성을 이용하여 투영연산을 수행한다.

  • 특징
    - 타 관계 대수 연산에 비해 비싼(=시간많이 소요) 연산

  • relational algebra와 동치
    - R = (A, B, C, D) S = (B, D, E) 일때,
    -RS:Πr.A,r.B,r.d,s.E(σr.B=s.Br.D=s.D(rXs))R\bowtie S : \Pi_{r.A, r.B, r.d, s.E}(\sigma_{r.B=s.B\cup r.D=s.D}(rXs))

  • 결합성, 교환성 충족

  • example1)

  • example 2)
    Retrieve professor names who teach in the Fall semester of 2020 together with the course titles that the professors teach
    myCorseρmycorse(cID,title,newDeptName,credit)(corse)myCorse\leftarrow\rho_{mycorse(cID, title, newDeptName, credit)}(corse)
    Πname,title(σsemester="FALL"year="2020"(professorteachesmyCourse))\Pi_{name, title}(\sigma_{semester="FALL"\wedge year="2020"}(professor\bowtie teaches\bowtie myCourse))
    OR
    Πname,title((σsemester="FALL"year="2020"(teaches))professormyCorse)\Pi_{name, title}((\sigma_{semester="FALL"\wedge year="2020"}(teaches))\bowtie professor\bowtie myCorse)

    • course 테이블을 myCourse 테이블로 재명명하는 이유는 deptName 속성 이름을 변경하기 위함이다. 재명명을 하지 않으면, course의 deptName과 professor의 deptName 속성간에 조인이 발생하기 때문

theta join, equi join

join의 종류

  • outer join
  • inner join
    • theata join
      • rθsr\bowtie_\theta s
      • 가장 일반적인 조인 연산
    • equi join
      • theta 조인 중에서 조인 조건이 동등 조건만으로 구성이 되는 경우
    • natural join
      • equi 조인 중에서 조인 조건 속성이 조인 결과에 한번만 나오는 경우

예시

  • 세타 조인은 pID의 산술비교 “myProfessor.pID > myTeaches.pID”가 조인 조건

    • 두 관계 사이에 카티시안곱을 하고, 그 결과에 대하여 조인 조건을 적용하여 세타 조인 결과를 구한다.
    • pID는 두 입력 관계에 모두 나오므로, 이름 모호성을 해결하기 위하여 관계명을 속성명 앞에 명기하였다.
  • 동등 조인 예제는 조인 조건 모두가 동등조건을 가지는 경우

    • 상기 예제와 같이 입력 관계의 모든 속성이 결과 테이블에 속하게 된다.
    • 동등 조인에서는 반드시 동일한 내용을 가지는 속성이 2번 결과 테이블에 나오게 되며 (비록 속성명은 재명명되어 구분되지만), 중복되는 정보가 존재한다.
    • 이를 제거한 것이 자연 조인이다.

outer join

  • 내부 조인 연산에서는 조인 조건을 만족시키지 않는 터플은 조인 결과에서 배제가 되나, 외부 조인은 이러한 터플도 결과 관계에 포함
    • 조인 속성에 서로 관련되는 값이 없는 터플도 결과 관계에 속하게 함
    • 이렇게 함으로서 좀 더 많은 터플 정보를 결과 관계에 유지할 수 있다.
  • null 활용
    • 없는 값의 경우 비워두지 않고 null로 채워둔다.

일때
natural left join

  • join 조건 맞추되, 왼쪽 테이블의 tuple들 중 join 조건을 맞추지 않더라도 결과에 포함된다
  • 해당 attribute에 값이 없더라도, null로 채워두어 겨로가에 포함시킨다.

natural right join & full outer join

Division ÷\div

  • 나눔 연산의 결과 관계는 공통 속성이 제거된 속성을 가진 관계
    • 공통속성이 있어야 계산 가능
    • ⚠️SQL은 나눔 연산을 직접적으로 지원하지X.
    • 차집합 연산을 활용하는 간접적으로 표현 가능
      - r÷s=ΠRS(r)ΠRS((ΠRS(r)Xs)ΠRS,S(r))r\div s=\Pi_{R-S}(r)-\Pi_{R-S}((\Pi_{R-S}(r)Xs)-\Pi_{R-S,S}(r))

Exercise

  • 문제상황

  • Find all loans that have amounts over $1200

profile
Sometimes you win, sometimes you learn 🏃‍♀️

0개의 댓글