본문 바로가기

Programming/DataBase System

Chapter2 - 관계 연산

  • 관계 연산



모든 절차식 관계형 질의 언어는 하나의 릴레이션이나 릴레이션의 쌍에 적용할 수 있는 몇 가지 연산을 제공한다. 이러한 연산은 결과가 항상 하나의 릴레이션으로 표현된다는 훌륭한 속성을 가지고 있다. 이 속성은 모듈식(modular) 방법으로 몇 가지 연산을 하나로 통합할 수 있다. 특히, 관계 질의의 결과 역시 하나의 릴레이션이기 때문에, 관계 연산은 질의의 결과에 적용할 수 있을 뿐만 아니라 릴레이션의 집합에도 적용할 수 있다.

    특정 관계 연산은 언어에 따라서 다양한 방법으로 표현되지만 일반적인 체계는 이 장에서 설명하는 방식과 일치한다. 3장에서는 SQL로 연산들을 표현하는 방법을 다룰 것이다. 

    가장 많이 쓰이는 연산은 하난의 릴레이션에서 어떤 조건을 만족하는 특정 투플을 선택하는 연산이다(예, instructor 릴레이션에서 salary > $85,000를 만족하는 투플을 선택). 그 결과는 원래 릴레이션(instructor)의 부분집합인 새로운 릴레이션이다. 예를 들면, 그림 2.1의 instructor 릴레이션에서 "급여가 $85000보다 높은" 조건을 만족하는 투플이 그림 2.10에 결과로 나타나 있다.

    다음으로 많이 쓰이는 연산은 릴레이션에서 특정 속성(column)을 선택하는 연산이다. 그 경과는 선택된 속성만을 가지고 있는 새로운 릴레이션이다. 예를 들어 instructor 릴레이션에서 교수의 ID와 salary만 필요하고 name 과 dept_name은 필요하지 않은 경우, 그 결과는 ID와 salary 속성만을 가진 그림 2.11과 같이 나타날 것이다. 결과에 나타난 각 투플은 instructor 릴레이션으로부터 온 것이지만 선택된 속상만을 가지고 있게 된다.






    조인(join) 연산은 두 릴레이션을 합치는 연산이다. 각 릴레이션에서 투플을 하나씩 선택해서 두 투플을 하나의 투플로 합칠 수 있다. 릴레이션을 조읹할 때 다양한 방법이 사용된다. 이러한 방법에 대해서는 3장에서 다룰 것이다. 위의 마지막 그림은 instructor 테이블과 department 테이블로부터 투플을 조인한 예제이다. 결과적으로 각 교수가 어떤 학과에서 일하고 있는지 알 수 있다. 이 결과는 instructor 릴레이션의 각 투플을 해당 교수의 학과와 관련된 department 릴레이션의 투플과 합쳐서 나타난 결과이다.

    마지막 그림에 나타난 조인의 형태는 자연 조인(natural join)이라고 한다. instructor 릴레이션의 dept_name와 department 릴레이션의 dept_name이 같은 값을 가지는 투플을 서로 합친 결과이다. 이과 같이 합쳐진 모든 투플의 쌍이 결과에 나타나 있다. 일반적으로 두 릴레이션의 자연 조인 연산은 두 릴레이션에 공통적으로 포함되어 있는 속성의 이름을 합치게 된다.

    카티션 곱(Cartesian product)연산은 두 릴레이션의 투플을 합친다. 하지만 카티션 곱 연산의 결과는 조인 연산과는 다르게 속성값이 일치하는지는 강관없이 두 리레이션으로부터 가능한 모든 경우를 결과에 포함 시킨다.

    릴레이션은 집합이기 때문에 일반적인 집합 연산을 릴레이션에 적용시킬 수 있다. 합집합(union)연산은 비슷한 구조를 가지고 있는 두 테이블에 대한 합집합을 수행한다. 예를 들어 학부생에 대한 테이블과 대학원생에 대한 테이블을 합집합 연산을 수행하면 그 학과에 소속되어 있는 모든 학생의 집합을 얻을 수 있다. 교집합(intersection), 차집합(set difference)과 같은 다른 집합 연산도 마찬가지로 적용될 수 있다.

    이전에 언급한 바와 같이, 질의의 결과에도 연산을 수행할 수 있다. 예를 들어 급여가 $85,000이상인 교수의 ID와 급여를 알고 싶은 경우, 예제에서 언급되었던 두 연산을 수행할 수 있을 것이다. 우선, instructor 릴레이션에서 습여가 $85,000이 넘는 교수의 투플을 선택한다. 그 결과로부터 두 속성, ID와 salary를 선택한다. 그 결과는 ID와 salary를 포함하고 있는 마지막 그림에 나타나 있다. 모든 경우 있어서 두 가지 연산의 순서가 상관이 없는 것은 아니지만, 이 예제에서 두 가지 연산의 순서는 상관이 없다.



  • 관계 대수

관계 대수는, 숫자에 대해서 수행하는 대수 연산인 덧셈, 뺄셈, 곱셈과 같이, 릴레이션에 수행하는 연산의 집합을 정의한다. 대수 연산이 하나 이상의 숫자를 입력으로 받아서 하나의 숫자를 출력으로 하는 것과 같이, 관계 대수 역시 하나 혹은 두 개의 릴레이션을 입력으로 받아서 하나의 릴레이션을 결과로 출력한다. 







    때때로, 질의의 결과가 중복 투플을 가지고 있지고 한다. 예를 들어 instructor 릴레이션에서 dept_name 속성을 선택했다면, "Comp. Sci" 가 세 번 나오는 것과 같이 중복된 결과가 나타날 것이다. 몇몇 관계형 언어의 경우에는 집합의 수학적 정의를 따라서 중복을 제거한다. 또 다른 관계형 언어는, 대량의 결과에서 중복을 제거하는 것이 꽤 많은 작업을 필요로 하기 때문에, 중복된 투플을 그대로 나눈다. 이 경우는 순수하게 수학적 의미로 보았을 때 릴레이션이라고 할 수 없다.

    물론, 데이터베이스의 데이터는 시간에 따라서 변한다. 새로운 투플을 입력하거나, 기존에 존재하는 투플을 제거하거나 특정 속성의 값을 변화시키는 갱신 작업에 의해서 릴레이션이 수정될 수 있다.



  • Sorting => 중복 제거(차집합, 합집합등에 사용)

















































'Programming > DataBase System' 카테고리의 다른 글

Chapter3 -SQL 질의 언어의 개요  (0) 2019.04.14
Chapter2 - 요약  (0) 2019.04.14
Chapter2 - 관계형 질의어  (0) 2019.04.14
Chapter2 - 스키마 다이어그램  (0) 2019.04.14
Chapter2 - 키  (0) 2019.04.13