실제 세계의 데이터를 관계라는 개념을 사용해 표현한 데이터 모델이며 릴레이션 단위로 다양한 연산을 사용해 질의를 수행하는 데이터 모델이다.
SQL에 있어 릴레이션에 해당하는 것은 테이블이다. 릴레이션은 제목(Heading)과 본체(Body)로 구성돼 있으며 제목은 속성(Attribute)이 n개 모인 집합이며, 속성은 이름과 데이터 형으로 되어 있다. 본체는 속성 값의 집합인 행(tuple)의 집합이다 튜플에 포함된 속성 값은 이름과 데이터 형이 heading에서 지정한 것과 일치해야한다.
릴레이션이란 튜플의 집합이고, 튜플은 모두 같은 n개의 속성값의 집합으로, 데이터 구성이 서로 같다.
튜플은 행, 속성을 열이라고 한다.
수학에서 사용되는 개념으로 모임을 포현하는 개념이다. 집합에 포함된 각 물건을 요소나 원소(Element).
관계형 모델은 집합론에 기린하는 데이터 모델이며, NULL값을 포함할 수 없다.
데이터를 릴레이션이라고 표현한다면 그에 대한 연산은 쿼리(질의)다. 관계형 모델은 릴레이션 단위로 다양한 연산을 사용해 질의를 수행하는 데이터 모델이다. 릴레이션은 튜플의 집합이며 릴레이션의 연산도 집합론을 바탕으로 한다.
제한(Restrict)
프로젝션(projection)
확장(extend)
속성명 변경(rename)
합집합(Union)
교집합(intersect)
차집합(Difference)
곱집합(Product)
결합(Join)
교집합과 곱집합은 결합의 특수한 예다.
관계형 모델에서 중요한 것은 릴레이션을 사용한 연산 결과가 릴레이션이 되는 것이다. 이와 같이 입력과 출력이 같은 데이터 구조를 가진 성질을 클러저라고 한다.
연산 결과가 같으면 결과를 다른 릴레이션과 조합해 연산할 수 있다. 릴레이션의 연산만을 이용해 복잡한 연산을 표현할 수 있다는 점이 관계형 모델의 핵심이다.
데이터 형식이란 각 속성이 어떤 값을 가질 것인지를 의미한다.
변수란 값을 대입하는 그릇이며 변수의 내용을 프로그램이 실행되면서 끊임없이 변한다.
변수에 대입할 수 있는 값은 무한정한 값이 아니며, 사용할 수 있는 범위가 한정돼 있다. 컴퓨터가 표현할 수 있는 데이터는 변경할 수 있는 한계가 있다. 즉 데이터 형식은 그 변수에 대입할 수 있는 값의 유한집합이다.
관계형 모델에서 데이터 형식은 도메인이라고 한다. 값은 그 집합의 요소 하나하나이고 변수는 어떤 시점에 그 집합에서 요소를 한 개 선택한 것이다. 집합의 요소에는 변화가 없지만 변수는 변한다. 그 집합 전체를 도메인이라고 한다.
도메인이 유한집합이라는 것은 튜플이 취득할 수 있는 값은 유한집합의 곱집합으로 나타낼 수 있다.
관계형 모델은 릴레이션을 구성하는 제목, 본체, 튜플뿐 아니라 속성의 데이터 형식 조차 집합으로 되어져 있다.
SELECT는 SQL에서 데이터를 조회하는데 사용하는 유일한 명령이다. 질의 기능은 전부 SELECT이다.
SELECT 컬럼의 목록
FROM 테이블의 목록
WHERE 검색 조건
위의 세 항목 모두 대수연산에 해당한다.
RDB의 SELECT문에서 항목들은 평가되는 순서가 옵티마이저로 인해 실행 순서가 바뀌게 된다. 그렇기 때문에 위의 순서는 논리적인 의미이다.
관계형 모델에는 릴레이션 자체가 값이기 때문에 갱신이라는 개념이 존재하지 않다. 하지만 SQL에서 테이블은 값과 변수라는 양쪽의 역할을 하기 때문에 insert할 경우 릴레이션이 바뀌는 것처럼 보인다.
관계형 모델에서 릴레이션을 저장하는 변수는 Relvar(Relation Variable, 관계변수)라고 하며, SQL에서 테이블의 갱신 처리는 Relvar의 역할로 테이블에 할당된 릴레이션의 값을 변경하는 것이다.
INSERT는 Relvar의 값을 해당 릴레이션에 새롭게 INSERT할 튜플을 추가하고 릴레이션과 바꾸는 작업에 해당한다.
R:= R ∪ {T}
차집합이라고 할 수 있으며 관계형 모델로 표현하면 전체 릴레이션(=Relvar에 대입되는 값)에서 WHERE절의 조건에 해당하는 튜플의 집합(부분집합)이 되고 두 릴레이션의 차집합을 Relvar에 대입하는 것과 같다.
R:= R - {T}
즉 값 자체는 갱신할 수 없으므로 튜플의 값을 바꾸는 것은 관계형 모델에서 불가능하다. 그렇기 때문에 아래와 같이 동작한다.
R:=(R-{T1})∪{T2}
SQL은 테이블은 원래 집합이 아니므로 같은 행이 있을 수 있다. SQL을 관계형 모델에 맞게 사용하려면 테이블을 집합처럼 사용해야 한다.
집합은 요소 사이의 순서가 없어서 집합으로 정의된 릴레이션의 본체, 튜플, 제목에 포함된 요소에도 순서가 없다. 하지만 SQL에는 순서가 있다. 그렇기 때문에 관계형 모델에 따라 SQL을 사용하려면 행이나 컬럼의 위치를 고려한 쿼리를 작성하면 안된다. a 릴레이션은 값이므로 갱신할 수 없지만(변수는 값을 담는 그릇이므로 변경가능), 테이블은 값과 변수의 기능을 둘다 한다.
릴레이션은 갱신이 없기 때문에 트랜잭션의 ACID 특성과 아무 관게가 없다. 트랜잭션은 값과 변수 두가지 성질을 겸하는 테이블이라는 개념이 있고 SQL이기 때문에 의미가 있는 개념이다.
집합에는 NULL이라는 개념이 없고, SQL에서의 NULL은 값이 존재하지 않거나 알 수 없다는 의미의 특별한 기호이지 값이 아니기 때문에 null을 집합에 포함할 수 없다.