33강. 관계형 모델
- 관계형 모델을 기반으로 작성된 데이터베이스가
관계형 데이터베이스
이다.
- SQL은 관계형 모델에 의해 구축된 데이터베이스를 조작하는 체계적인 명령의 집합이다.
- 관계형 모델에서 SQL이 만들어졌지만 유감스럽게도 관계형 모델에서 사용하는 용어와 SQL의 용어는 일치하지 않는다.
- SQL을 사용하는 이상 관계형 모델의 용어를 몰라도 딱히 어려움은 없지만 알아두는 것이 좋다.
1. 관계형 모델
관계형 모델(Relational Model)
의 기본적인 요소는 릴레이션(Relation)
이다.
- 이 릴레이션이라는 말 자체는
관계
를 뜻하지만 관계형 모델에서는 약간 다른 의미를 가진다.
- 결합에 관해 설명할 때
일반적인 시스템의 데이터베이스에는 복수의 테이블이 있어 테이블 간의 관계가 중요하다
고 했다.
- 관계형 모델의 릴레이션은 SQL에서 말하는
테이블
에 해당한다. 테이블끼리의 관계가 아니다.
릴레이션은 테이블을 말한다!
- 관계형 모델의 릴레이션에는 몇 가지
속성(attribute)
이 있다.
- 이 속성은 속성 이름과 형 이름으로 구성된다.
- 속성은 SQL에서 말하는 열에 해당한다.
- 그리고 SQL에서의 행은 관계형 모델에서
튜플(tuple)
이라 불린다.
- 정리하자면 릴레이션은 테이블, 속성은 열, 행은 튜플에 해당한다.
- 관계형 모델은 데이터 구조에 관해 정의한다. 릴레이션은 튜플의 집합이며, 릴레이션에 대한 연산이 집합에 대한 연산에 대응된다는 이론을
관계대수
라고 한다.
- 이 같은 관계대수의 기본규칙은 다음과 같다.
- 하나 이상의 관계를 바탕으로 연산한다.
- 연산한 결과, 반환되는 것 또한 관계이다.
- 연산을 중첩 구조로 실행해도 상관없다.
UNION
이나 테이블의 결합을 익힌 만큼, 연산한 결과도 관계(릴레이션 = 테이블)이다.
2. 관계형 모델과 SQL
- 관계대수에서는 자주 사용될 것 같은 릴레이션의 연산 방법을 몇 가지 규정한다.
합집합
합집합(union)
은 릴레이션끼리의 덧셈을 말한다.
- SQL에서는
UNION
에 해당한다.
SELECT * FROM A UNION SELECT * FROM B
차집합
차집합(difference)
은 릴레이션끼리의 뺄셈을 말한다.
- SQL에서는
EXCEPT
에 해당한다.
SELECT * FROM A EXCEPT SELECT * FROM B
교집합
교집합(intersection)
은 릴레이션끼리의 공통부분(교집합)을 말한다.
- SQL에서는
INTERSECT
에 해당한다.
SELECT * FROM A INTERSECT SELECT * FROM B
곱집합
곱집합(cartesian product)
은 릴레이션끼리의 대전표를 조합하는 연산을 말한다.
- SQL에서는
FROM
구에 복수의 테이블을 지정한 경우 곱집합으로 계산된다.
- 이때
CROSS JOIN
으로 교차결합을 하면 곱집합을 구할 수 있다.
SELECT * FROM A, B
SELECT * FROM A CROSS JOIN B
선택
선택(selection)
은 튜플의 추출을 말하며, 선택은 제한이라 불리기도 한다.
- 튜플은 SQL에서 행을 말하기 때문에
WHERE
구에 조건을 지정해 데이터를 검색하는 것에 해당된다.
SELECT * FROM A WHERE no < 3
투영
투영(projection)
은 속성의 추출을 말한다.
- SQL에서 속성은 열을 말하기 때문에
SELECT
구에 결과로 반환할 열을 지정하는 것에 해당된다.
SELECT a FROM A
결합
결합(join)
은 릴레이션끼리 교차결합해 계산된 곱집합에서 결합조건을 만족하는 튜플을 추출하는 연산이다.
- SQL에서는 내부결합에 해당한다.
- 관계대수에도 내부결합과 외부결합이 있다.
SELECT a FROM A INNER JOIN B ON A.no = B.no