Extended Operators of Relational Algebra


Bags

What is Bags?

  • 일반적으로, Database의 각종 Data들은 간단한 순수 집합 베이스의 tuple들이다.
  • 가끔, Database system의 Relation은 Duplicate tuple(중복튜플)이 허용된다. 
    • (말인 즉슨 같은 tuple이 1회 이상 발생 허용) 
  • 이 때, 그 set을 Bag 혹은 Multiset이라 부른다. 

여기서의 '중복'이란, tuple의 중복이다 ( component의 중복과 다름 )


Sets vs Bags
종류의미중복 허용 여부
SetsData들의 집합
Bags마찬가지로, 
Data들의 집합

Set, Bag 둘 다 집합의 의미이며 tuple의 순서 역시 상관 없다.



Why Bags?

  • 개념상으로는, 중복을 허용하지 않아 tuple 개수가 더 적은
    Set이 Bag보다 Speed가 빠르고, 효율적인 Implementation에 유리한 것 처럼 보인다.
    하지만 이전에 언급했듯이, Union 연산은 Bag이 더 빠르다. 
    또, Projection 연산은 작업을 각 튜플에 대해 독립적으로 할 수 있게 해준다.
  • Set으로 결과를 얻으면 연산 후 일일이 다 비교하여 중복이 있는지 체크해야한다.
    반면 Bag으로 결과를 얻으면 비교 없이 작업이 종료된다.
    이와 같이, 연산을 수행하고 곧바로 종료되는 Bag과 달리, 중복 튜플을 확인작업하는 Set이 더 느리다.
    (단지 결과 Relation은 Set based가 크기가 작아서 빠르게 보이기만 할 뿐 사실상 훨씬 소요시간 ↑)
  • 또한, 평균 계산 등 아예 결과가 다른 경우도 있다. (그림 참조)

https://www.lucidchart.com/publicSegments/view/4767fc4f-e463-49e2-935d-e4b620240243/image.png



Union, Intersection, and Difference of Bags

  • Relation R에 튜플 T가 n개, Relation S에 튜플 T가 m개 있을 경우,
  • T의 개수 #T
    • #T in (R ∪ S) = n+m (개) 
    • #T in (R ∩ S) = MIN(n, m) (개) 
    • #T in (R - S) = MAX(0, n-m) (개) 

https://www.lucidchart.com/publicSegments/view/a7fc7147-3c4f-41bd-bf6b-96ed83ef7c56/image.png



Bag' operations on Sets 
Relation R과 S가 set이라고 하자.
이때 방금 언급한 Intersection, Difference 연산은
Bag-rule로 실행해도 같은 결과를 보인다.
하지만 Union 연산의 경우, Bag-rule로 실행하면
결과 Relation에 중복이 생길 수도 있다.
그러므로 Union 연산은 조심하자! 



Projection & Selection on Bags

  • Bag에 ProjectionSelection을 적용할 때, 
    각 tuple마다 독립적으로 수행(즉, 이와 같은 tuple이 있나 신경쓸 것 없이 자신만 신경쓰고)할 수 있다. 
    또한 Selection Condition 역시 각 tuple에 독립적으로 적용해야한다. 
  • Set의 연산과 중복을 허용한다는 점만 빼면 별 다를 게 없어서 그림은 생략했다. 


Algebraic Laws for Bags (연산법칙) 
Algebra(대수)에는 많은 법칙들이 있다. 
예를들어, Union 연산의 교환법칙 같은경우 Set이든 Bag이든 상관없이 성립한다. 
하지만, (R ∪ S) - T = (R - T) ∪ (S - T)같은 분배법칙같은 경우, 성립하지 않음에 주의! 

https://www.lucidchart.com/publicSegments/view/f68f959e-0207-43c9-be63-19f67abbf0c1/image.png



Product of Bags

  • Set의 Product 연산과 같다. 
    R에 tuple T1이 n개, 
    S에 tuple T2가 m개 있을 때 
    Product R × S에 tuple T1T2가 nm회 나올 뿐이다. 

https://www.lucidchart.com/publicSegments/view/3a768e25-00d0-4814-8d57-37980e174e15/image.png



Joins of Bags

  • Join 연산 역시 별거 없다. 
    그냥 Set의 Join 연산처럼 각 tuple들에 대해 
    조건에 맞는지 비교하고 결과 tuple을 결정하기만 하면 된다. 
    또한 연산 중 중복을 제거하지 않는다. 
    즉, 각각 별개의 독립적인 tuple로 취급한다. 

https://www.lucidchart.com/publicSegments/view/e88f29aa-ef70-4c46-ab93-5617a3b09461/image.png



Extended Operators of Relational Algebra

  • 지금까지 기본 Relational Algebra와 Set&Bag구별을 해 보았는데, 이들 모두 기초 질의어이다. 
  • SQL같은 언어는 실제 Application Processing에서 상당히 중요한 몇가지 다른 연산들도 더 가지고 있다. 
  • 추출 부분에 산술이 허용되는 등 기본 관계 대수 연산이 몇 가지 측면에서 확장되었다.



Duplicate Elimination

  • 말 그대로 중복을 제거하는 연산이다. 
  • δ(R) [ :델타]로 표현하며, Bag인 R의 중복튜플들을 제거함으로써 Set으로 변환한다.

https://www.lucidchart.com/publicSegments/view/2105ef0c-911c-4707-8495-241b53bf9df9/image.png



Aggregation Operators

  • 결과를 특정 연산을 취함으로써 하나의 결과로 반환한다. 
    • SUM : Column의 SUM(합)값을 반환한다.
    • AVG : Column의 Average(평균)값을 반환한다.
    • COUNT : Column의 Count(개수)값을 반환한다. ( 이 때, 별다른 언급이 없으면 중복 포함 )
    • MIN and MAX 
      • Numerical values : 각각 smallest, largest값을 반환한다.
      • Character-String values : 각각 
        Lexicographically(Alphabetically: 사전순서대로)하게 first, last 값을 반환한다. 

https://www.lucidchart.com/publicSegments/view/3845d05a-90c6-4539-a3c0-5d8bfef6ef8b/image.png


엄밀히 따지자면, Aggregation operator는
Relational Algebra는 아니다. 하지만
뒤에 나올 Grouping에서 사용하기 때문에
같이 학습하도록 한다.



Grouping

  • 보통, 전체 Column을 가지고 Average같은 Aggregation 연산을 하지는 않는다.
    각각 Column 1개 전체의 연산 말고 좀 더 Column들을 묶어서 연산을 행한다.
    • 예를 들어, Studio마다 상영시간의 총합을 알고싶은 경우엔 어떻게 하나?
      → Studio마다 묶어서 상영시간의 총합 Group마다 독립적으로 계산한다.
  • γL(R) [ :감마]로 표현하며, List L : Attribute 및 Aggregation으로 나타낸다. 
    이 때, 그룹화의 기준이 되는 Column을 Grouping attribute
    Aggregation 연산을 하는 Column(들)을 Aggregated attribute라 한다.
  • γL(R)의 특징
    1. R의 일부를 Group화한다. 각 Group들은 Grouping attribute에 해당하는 1개의 값을 갖는 모든 tuple들로 구성된다.(중복은 제거) 
      즉 Grouping attribute에는 NULL값이 허용되지 않는다
    2. 만약 Grouping attribute가 없다면, Relation R은 1 Group이다. 
    3. L에는 Attribute, 연산, →(Renaming)등을 기재할 수 있다.
    4. L에 연산(Aggregation)이 들어가면, 각 Group당 1개의 tuple만 존재하게 된다. 


Grouping은 쉽게 말해, 공통점을 찾아 그룹화 하는 것이다.

https://www.lucidchart.com/publicSegments/view/a299bb8d-c4bf-411e-896c-f119eab52c4a/image.png



δ is a special case of γ
델타(Duplicate Elimination)는 여러 개의 표현이 존재한다.
예를들어, R(A,B,C)에 대해 δ(R) = γA, B, C(R)이다.
즉, 델타는 Aggregation 없이 모든 Columns를 각각 그룹화 하는것과 같다.
그럼 각각의 Group들은 감마 연산자 자체가 중복을 제거하기 때문에 결국 같아진다.
하지만, 델타는 더 일반적이고 중요한 연산자라 Algebraic측면에선 더욱 고려할 필요가 있다.


혹자는 감마(Grouping)를 Set Projection의 확장(Extension)이라 여긴다.
즉, γA1A2..An(R) = πA1A2..An(R)이다. (물론 Set 한정, Bag이면 다름) 
그러므로 감마는 종종 일반화된 추출(Generalized Projection)이라 불린다.



Extending the Projection Operator

  • Extended Projection도 저번에 보았던 Projection과 거의 유사한데, 
    Attribute list L에 다음과 같은 요소들을 기재하여 좀 더 구체적인 추출이 가능하다.
  • πL(R) [ :파이]로 표현하며, 여기서 L값의 의미는,
    1. Relation R의 Column.
    2. x→y 표현 : x와 y는 둘 다 Column name이고, x를 y로 Renaming한다. 결과 Schema 역시 y로 표기된다.
    3. E→z 표현 : E는 Expression(Column, 상수, 산수, 스트링 연산자 등)
      z는 그 E의 계산 결과를 Renaming한 Column name이다.


신기하게도, 중복이 생길 수 있다.

https://www.lucidchart.com/publicSegments/view/3ca4fada-d84b-437d-b778-ad3a8d293be8/image.png



The Sorting Operator

질의의 결과 데이터를 저장해두고, 다음에 또 보고 싶을 때가 있다.
이를 위해 τL(R) [ :타우]을 사용해 정렬하는데, L은 Column의 listR은 역시 Relation이다.
즉, τL(R)는

  1. L이 하나의 Column : 이 Column의 값만을 기준으로 tuple을 정렬한다. (같다면 임의로 배치)
  2. L이 다수의 Column : 앞의 Column 기준으로 tuple을 정렬하고
    만약 같은 tuple이 있다면 그 다음 Column 기준으로 정렬하고,
    이런 방식으로 계속 정렬한다. ( L = A1,A2,...An에서 A1기준, A2기준,...An기준 )
    이 때도, n개 의 Column 말고 다른 Column만 다른 tuple이 존재하고, n개의 Column 값이 전부
    같으면, 임의로 배치한다. 즉, 기준Column이 아닌 다른 Column으로는 정렬상태를 알 수 없다.

https://www.lucidchart.com/publicSegments/view/d723c21b-faf0-46e5-8379-e64a92dc7f04/image.png

τ는 Anomalous(변칙적, 가변적)이기 때문에, 결과가 Set(순서가 상관이 없는)이 아니라 
List of tuples(순서가 상관이 있는)로 반환하는 유일한 연산이다.
그래서 Sorting은 Final Step 연산이다. 만약 τ 뒤에 또 다른 Operator가 나온다면, 
정렬된 순서는 다시 섞이게 된다.


Outerjoins

Why? 

  • 조건에 부합하는 tuple만을 반환하는 Join연산을 지난번에 살펴보았다.
    하지만, 결과 Relation에서는 흔적도 찾아볼 수 없는,
    조건에 부합하지 않고 'dangling'되는 tuple(들)이 있어,
    원래의 Relation을 완벽하게 표현할 수는 없다.
    → To avoid dangling tuple's loss
  • 이를 위해, Outerjoin 연산을 사용하며,
    실제로 많은 상용 DB system에서 다양하게 쓰인다.


How to use it 

  • 기본 Join으로 연산을 하되, 부합하지 않아 삭제될 tuple들도 
    결과 Relation의 하위에 기재한다. 이 때, 빈 칸( NULL값 )은 로 표시한다.
  • Theta-join의 조건(Predicate, Condition) 역시 추가할 수 있다.
    (이 때는 먼저 Condition에 만족하는 튜플들을 반환한 뒤
    나머지 제거되는 튜플들을 NULL 값과 같이 표시한다)

https://www.lucidchart.com/publicSegments/view/64ec85df-13f1-4ad7-9a77-2e61c307848c/image.png






마침.


블로그 이미지

차트

소소한 일상 C코드 DB 항상 행복하게^-^★

,


Relational Algebra

Relational Data Operation

What is Relational data Operation?

  • 원하는 데이터를 얻기 위해 Relation에 필요한 Query를 수행하는 것으로,
    DB system의 구성 요소 중 데이터 언어의 역할을 한다.
  • 관계 대수/관계 해석 으로 나눌 수 있다. (기능과 표현력 측면에서 능력은 동등하다)
    • 관계 대수(Relational Algebra) : 절차식 언어, 원하는 결과를 얻기 위해 데이터의 처리 과정을 순서대로 기술한다.
    • 관계 해석(Relational Calculus) : 비절차식 언어, 원하는 결과를 얻기 위해 처리를 원하는 데이터가 무엇인지만 기술한다.

https://www.lucidchart.com/publicSegments/view/ffd9cd6c-c856-4fef-96fa-f749e6b77080/image.png

Why do we use it?

  • 원하고자 하는 데이터를 쉽고, 빠르고, 정확하게 얻고자 사용한다.
  • 새로운 데이터 언어 제안 시, 해당 데이터 언어의 유용성을 검증하는 기준
    관계 대수나 해석으로, 기술할 수 있는 모든 query를 기술할 수 있으면
    데이터 언어를 관계적으로 완전(Relationally Complete)하다고 판단할 수 있다.

Relational Algebra

What is Relational Algebra?

  • Relation을 다루는 연산으로, 검색 질의를 기술하는데 사용한다.
  • 절차식 언어이다. (User가 원하는 결과를 위해 어떤 연산을 수행해야 할 지 system에 알려준다)
  • 간단하며 명시적(Powerful) 표현을 사용한다.
  • 폐쇄 특성(Closure Property)을 가진다.

->피연산자와 그 연산의 결과 역시 Relation이다.

  • 대표 연산자는 8개로, 일반 집합 연산자 4개와 순수 관계 연산자 4개로 분류할 수 있다.
  • 피연산자의 특성 두가지
    • Variables that stand for relations(relation을 나타내는(대표하는) 변수)
    • Constants which are finite relations(유한한 relation의 상수)

    연산 : By System     vs     언어 : By User


Normal Set Operator

일반 집합 연산자

  • Relation이 tuples의 set이라는 개념을 이용하며, 수학의 집합 연산자를 차용한다.
  • 조건 : 피연산자가 두 개이며, 합병가능(Union-compatible)이어야 한다.
  • 합병가능 (Union-compatible)이란?
    이들의 필드 수가 같고,(속성의 개수)
    왼쪽에서부터 오른쪽으로 차례대로, 대응하는 필드들이 동일한 도메인을 가지고 있다.
    (도메인이 같으면 이름은 달라도 됨)


일반 집합 연산자
연산자기호표현의미

Union

R∪S

릴레이션 R과 S의 합집합 반환,
R∪S={t│t∈R ∨ t∈S}

Intersection

R∩S

릴레이션 R과 S의 교집합 반환,
R∩S={t│t∈R ∧ t∈S}

Difference

R-S

릴레이션 R과 S의 차집합 반환,
R-S={t│t∈R ∧ ¬t∈S}

Cartesian Product

×R × S

릴레이션 R과 S의 각 tuple들을 모두 연결,
R × S={r·s│r∈R ∧ s∈S}






UNION



https://www.lucidchart.com/publicSegments/view/dc41b327-a211-4580-a79b-299ff18eca04/image.png

Cardinality차수특징
│R∪S│≤│R│+│S│R과S의 차수와 같다

교환/결합법칙 성립










INTERSECTION



https://www.lucidchart.com/publicSegments/view/99aab467-5ed6-4c4f-8853-182b684b9122/image.png

Cardinality차수특징
│R∩S│≤ MIN{│R│,│S│}R과S의 차수와 같다

교환/결합법칙 성립






DIFFERENCE



https://www.lucidchart.com/publicSegments/view/cdca4006-f940-4ce9-a668-9beb4cf5f959/image.png

Cardinality차수특징
│R-S│≤│R│R과S의 차수와 같다

교환/결합법칙 불가







CARTESIAN PRODUCT



https://www.lucidchart.com/publicSegments/view/a97abf44-ea93-4ea6-83da-8fc8c216c613/image.png

Cardinality차수특징
│R × S│=│R│×│S│R과S의 차수를 더한 값교환/결합법칙 성립



Cartesian Product는 두 Relation의 구조가 달라도 가능하다.






Pure Relational Operator

순수 관계 연산자

  • Relation의 구조와 특성을 이용하는 연산자이다.
순수 관계 연산자
연산자기호표현의미

Selection

σσ조건(R)

릴레이션 R에서 
조건(Predicate)을 만족하는 tuples 반환

Projection

ππ칼럼(R)

릴레이션 R에서 
주어진 column으로만 구성된 tuples 반환

Join

R⋈S

릴레이션 R, S의 특정column(들)을 비교하여,
조건에 알맞는 컴포넌트가 있다면
그 컴포넌트(들)의 tuples 반환.

Division

÷R÷S

릴레이션 S의 모든 tuple과 관련이 있는
릴레이션 R의 tuples 반환

Rename

ρρs(x1,x2,...)(R)

릴레이션 R을 S로 개명
각 attribute를 x1, x2,...로 개명










SELECTION



https://www.lucidchart.com/publicSegments/view/b9b1d15e-c897-4e4e-822d-e8a681b9f2b0/image.png

특징

- 하나의 Relation에서만 수행하는 연산
- 조건식(Predicate)에는 비교연산자(>, ≥, =, ≠, ≤, <)와 논리연산자(, ) 이용
- 수평적 부분집합 개념










PROJECTION



https://www.lucidchart.com/publicSegments/view/a6d22977-c20a-49d9-9b36-951e1d8e280e/image.png 

특징

- 하나의 Relation에서만 수행하는 연산
- 수직적 부분집합 개념










JOIN



https://www.lucidchart.com/publicSegments/view/e37dddbf-9208-4cf0-9c48-b77cdc5e0699/image.png

종류특징
Join

- 릴레이션 R 하나로는 원하는 Data를 얻지 못하여 
관련있는 여러 Relation들을 함께 사용해야 하는 경우 사용 
자연 조인(Natural Join)이라고도 함

Theta-Join

- 이러한 조인 연산에, θ(조건; Predicate)을 부여해
조건을 만족하는 tuples를 반환
- 조건(Predicate)은 비교연산자(>, ≥, =, ≠, ≤, <)을 의미한다.

Equi-Join

- θ연산자가 등호(=)일 때의 세타 조인을 말한다.











DIVISION



https://www.lucidchart.com/publicSegments/view/ea663266-3648-4ae5-9404-6eca3535e0dd/image.png

특징

- 릴레이션 R이 릴레이션 S의
  모든 column을 포함하고 있어야 연산 가능 (R⊃S)










RENAME



https://www.lucidchart.com/publicSegments/view/1d7bf5ec-9d8e-4842-a846-c513966056b8/image.png

특징
- 각 combining시 Name conflict(이름 충돌)이 그림과 같이 빈번히 일어날 수 있다.
- 이는 User, DBA 모두에게 모호할 수 있어, 명시적으로 이름을 바꾸는 데 사용한다.





Bag vs Set

     초기 DBMS는 Bag을 이용한 data modeling을 하였다.
     Bag은 한마디로, 중복을 허용하는 집합 개념이다.
     그렇기 때문에 implementation 관점에서, 
     Set을 이용한 것보다 효율이 좋다.(두 Relation을 합칠 경우
     복사해서 붙여넣기만 하면 된다.)
     현재는 Data의 종류에 따라 저장 방법이 매우 다르므로
     이 두가지를 적절히 사용한다! ( All과 Distinct 개념 )

Combining Issues

Ordering

아무 조건(Predicate)이 없는 연산들은, 그 순서대로(괄호가 있다면 괄호부터) 행하면 되지만,
위에서 살펴본 Selection, Theta Join 등의 다양한 조건들을 갖는 연산들은
어떤 순서로 조건을 만족시키는 지 정하는 것이 좋다.

  • 예를 들어, 두 릴레이션 R1, R2를 ∧(AND)가 포함된 Theta join을 한다고 가정하자. 이 때 AND 양옆의 조건들을
    먼저 행하고 합칠 것이냐, 아니면 Cartesian Product 등으로 먼저 합친 뒤 조건을 행할 것이냐
    하는 등의 issue를 말할 수 있겠다.

이러한 것들은 Optimizer가 다양한 비용, 공간, 시간 등을 고려해 '적절히' 정한다.

A Linear Notation for Algebraic Expressions

대수식의 선형 표현법

  • Assignment : 복잡한 표현들 대신, 빈 relation을 만들어 순차적 assignment에 따라 표현한다.
    1. Relation 이름, 괄호안에 column 리스트를 입력한다. 보통 마지막 결과 relation 이름은 Answer로 칭한다.
    2. Assignment 기호는 :=를 사용한다.
    3. 대수 표현을 우변에 작성한다.
  • 이와 같은 작업을 행하면, 마치 C++의 Pseudocode처럼, 우측 대수를 좌측 relation에 대입한다.

예)

     Movies relation에서, 

     상영시간이 90분을 넘고 Fox사 배급인 영화의 제목과 개봉 년도를 찾아라.

     R(t,y,l,i,s,p) := σlength>90(Movies)
     S(t,y,l,i,s,p) := σstudioName='Fox'(Movies)
     T(t,y,l,i,s,p) := R ∩ S
     Answer(title, year) := π t,i(T)

블로그 이미지

차트

소소한 일상 C코드 DB 항상 행복하게^-^★

,