관계 데이터 모델의 개념

K PizzaCola·2021년 7월 11일
0

Database

목록 보기
2/2

데이터베이스 시스템(Fundamentals of Database System) 4장 앞부분을 공부하고 정리한 내용입니다.

관계 모델은 집합론(Set theory)과 1차 술어 논리(first-order predicate logic)를 기반으로 한다.

관계 모델(Relational Model) 용어 정리

Domain DD는 원자값(Atomic value)들의 집합이다. atomic이라 하면, 더 이상 나누어질 수 없는 값을 의미한다. Emails 도메인이면 이메일의 집합, Person_Names이라고 하면 사람 이름에 대한 집합이다. 이러한 도메인은 데이터 타입 또는 포맷을 정의할 수 있다.

Relation Schema는 R(A1,A2,...,An)R(A_1, A_2, ... , A_n) 으로 표현한다. RR은 릴레이션의 이름이고, A1,A2,...,AnA_1, A_2, ..., A_n은 Attribute이다. DDAiA_i의 도메인이며, dom(Ai)dom(A_i) 라고 표현할 수 있다.

차수(degree / arity) 는 릴레이션 스키마에서, Attribute의 갯수이다.

학생을 예로 들면

Student(Student_Number, Name, Phone_Number, Address, GPA)

에서, RR은 Student, A1A_1은 Student_Number, A2A_2는 Name 등등 이라고 할 수 있다. 여기서 학번은 숫자, 이름은 문자열, 전화번호는 문자열 등의 타입을 정의할 수 있다.

또한, Attribute에 대해서 도메인과 다음의 관계가 있다고 할 수 있다.

  • dom(Student_Number)=Student_Numbersdom(Student\_Number) = Student\_Numbers
  • dom(Name)=Namesdom(Name) = Names

Relation Schema R(A1,A2,...,An)R(A_1, A_2, ... , A_n)의 Relation (Relation State) rr은 n-tuple의 집합 r={t1,t2,...,tn}r = \{t_1, t_2, ..., t_n\} 이다. n-tuple은 n개의 값의 리스트이며, t=<v1,v2,...,vn>t = <v_1, v_2, ... , v_n> 으로 표기한다. 스키마 RR에 대해서 릴레이션 내포(intension)라고 하며, 릴레이션 상태(state) r(R)r(R)에 대해서 릴레이션 외연(extension) 이라고 한다.

여기서 r(R)r(R)RR을 정의하는 도메인들의 카티션 곱의 부분집합이 된다.

r(R)(dom(A1)×dom(A2)××dom(An))r(R) \sube (dom(A_1) \times dom(A_2) \times \cdots \times dom(A_n))

도메인 DD의 카디날리티(Cardinality)는 D|D|로 표기하고, 모든 도메인은 유한하다고 가정하면, 카티션 곱의 전체 투플 수는

dom(A1)×dom(A2)××dom(An)|dom(A_1)| \times |dom(A_2)| \times \cdots \times |dom(A_n)|

가 된다.

이해한 것 정리

도메인은 한 속성에 대해 모든 값을 포함하는 집합이라고 생각할 수 있다. 한국의 핸드폰 번호 도메인을 생각해본다면, 01X-XXXX-XXXX 형태의 모든 전화번호를 포함하는 집합이라 할 수 있다. 여기서 010-0000-0000 번호 하나는 원자값 하나가 된다. 그리고 위에 표현한 것과 같이 도메인은 타입이나 포맷을 가질 수 있다.

이제 릴레이션을 보자. 릴레이션 자체는 SQL의 테이블 하나라고 볼 수 있다. 이 릴레이션이 모여 데이터베이스 하나를 표현할 수 있다. 그리고 릴레이션은 Attribute 여러 개가 모여 하나의 릴레이션을 구성한다. 그 정의를 릴레이션 스키마라 하며, R(A1,A2,...,An)R(A_1, A_2, ... , A_n) 라고 표현할 수 있다. 이때, n는 릴레이션의 차수라고 한다.

Attribute는 책에선 애트리뷰트라고 번역되었다. 속성이라고도 할 수 있겠는데, 도메인과 비슷하다. 그런데 도메인은 집합이라면, 애트리뷰트는 집합은 아니고 도메인의 값 하나를 대표로 지칭하는 것인것 같다. 그래서 책에서 도메인은 복수로 표현되고, 애트리뷰트는 단수로 표현된다.

릴레이션 상태 rr은 투플들의 집합이다. 그리고 투플 하나는 n개 값의 리스트로 값들은 순서가 존재한다. 그리고 투플에서 하나의 값 viv_idom(Ai)dom(A_i)의 원소 하나이거나, NULL이다.

그래서 조금 쉽게 표현하면 RR은 테이블의 정의라고 할 수 있겠고, rr은 그 테이블의 현재 상태라고 할 수 있다. 실제 데이터베이스 테이블에 저장된 값들인 것이다. 그래서, RR은 내포라고 하며, rr은 외연인 것이다.

위에 정의에 의하면, 릴레이션은 투플들의 집합이므로, 투플들 사이에는 순서가 없다. 하지만, 실제 데이터베이스에서 물리적으로 저장될 때는 순서가 있을 수 밖에 없을 것이다.

릴레이션의 또 다른 정의에 의하면, 릴레이션 스키마 R={A1,A2,...,An}R = \{A_1, A_2, ..., A_n\}으로, 애트리뷰트의 집합이다. 그 외에 추가적인 이야기를 더 하면 투플 하나에서 애트리뷰트 사이에 순서는 없다. 하지만, 실제로 구현할 때는 물리적으로 순서를 가질 수 있다. 그래서 책에서는 첫 번째 정의를 이용한다고 한다.

관계 모델에서 투플 내의 값들은 원자값, 집합의 원소 하나이기 때문에 복합 애트리뷰트와 다치 애트리뷰트는 허용되지 않는다. 이 상태는 제 1 정규형이다.

NULL은 값을 알 수 없거나 값이 지정되지 않을 때 사용한다. 일반적인 유형으로는 앞의 경우에 추가하여 가능하지 않은 값을 가지고 있는 경우, 이 투플에는 이 애트리뷰트를 적용할 수 없는 경우 등이 있는데, 이를 구분하는 것은 어려우며, 책의 범위를 넘어선다고 한다.

그래서 일단은, 값을 알 수 없다 이기 때문에, NULL과 NULL 사이의 비교는 같은 경우를 비교할 수 없다. 그래서 SQL에서 IS NULL로 조건을 설정한다.

릴레이션 스키마는 선언 또는 주장이다. 위에 예제에서, Studunt는 Student_Number, Name, Phone_Number, Address, GPA를 갖는다고 주장한다. 그리고 각 투플은 이 주장에 대한 사실이다. (1, 'k', 010-0000-0000, 한국, 3.5)라고 한다면, 1번, 이름이 'k', 번호가 010-0000-0000, 주소가 한국이고, 평균평점이 3.5인 학생이 존재한다는 사실을 주장한다.

1차 술어 논리로 해석한다면, 투플 하나는 그에 관련한 명제 하나에 대해서 참인 것을 이야기 한다.

학생과 과목 사이에 수강을 나타내는 테이블을 생각해보자. 1번 학생이 1번 과목을 수강하는 관계 테이블을 수강으로 나타낸다면, 수강(학번, 과목번호) 로 정의할 수 있을 것이다. 그리고 그 투플 하나는 (1, 1)이라 표현될 것인데, 이 투플은 학번이 1번인 학생이 과목번호가 1번인 과목을 수강하고 있다 라는 명제를 나타내고, 그 것이 참이기 때문에 수강 테이블에 투플 하나로 존재한다고 생각할 수 있겠다.

profile
공부하는 개발자입니다.

0개의 댓글