관계 데이터 모델의 개념

51370 단어 dbrdbdb

데이터베이스 시스템(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)

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

학생을 예로 들면

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

에서, RR은 Student, A1A_1

또한, 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)

여기서 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)

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

릴레이션 상태 rr은 투플들의 집합이다. 그리고 투플 하나는 n개 값의 리스트로 값들은 순서가 존재한다. 그리고 투플에서 하나의 값 viv_i

그래서 조금 쉽게 표현하면 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번인 과목을 수강하고 있다 라는 명제를 나타내고, 그 것이 참이기 때문에 수강 테이블에 투플 하나로 존재한다고 생각할 수 있겠다.

좋은 웹페이지 즐겨찾기