본문 바로가기

Programming/DataBase System

Chapter2 - 관계형 모델 소개

데이터 모델은 데이터, 데이터의 관계, 데이터의 의미, 일관성 제약조건 들을 기술하기 위한 개념적 도구의 모임이다. 관계형 모델은 데이터와 이런 데이터의 관계를 표현하기 위해 테이블의 집합을 사용한다. 테이블은 개념적으로 간단명료하기 때문에 널리 사용되었다. 오늘날 대부분의 데이터베이스 시스템이 관계형 모델에 기반을 두고 있다. 관계형 데이터베이스는 논리적 단계와 뷰 단계에서 데이터를 설명하고, 데이터 저장의 세부적인 하우 단계를 추상화 한다. 개체 관계 모델은 데이터베이스 디자인에서 널리 사용되는 상위 단계의 모델이다.

    사용다들이 관계형 데이터베이스에서 데이터를 이용할 수 있도록 하기 위해서는 우선 몇 가지 쟁점을 짚고 넘어가야 한다. 가장 중요한 쟁점은 데이터 무결성(integrity)과 데이터 보호 문제이다. 사용자의 행동이 데이터에 피해를 줄 수 있다면, 데이터베이스는 그 행동이 의도적인지 아닌지에 상관없이 모든 사용자 행위에 대해서 데이터를 보호해야 한다.



관계형 모델은 오늘날 상용 데이터 처리 응용 프로그램에서 가장 많이 쓰이는 모델이다. 이러한 관계형 모델이 많이 사용되는 이유는 모델의 단순성 때문이다. 기존의 네트워크형 모델이나 계층형 모델과는 달리, 관계형 모델은 프로그래머의 수고를 크게 덜어준다.



  • 관계형 데이터베이스의 구조

관계형 데이터베이스는 테이블(table)의 모임 으로 구성되며, 각 테이블은 고유한 이름을 가지고 있다. 예를 들어 instructor 테이블을 보면, 이 테이블은 교수에 관한 정보를 저장하고 있다. 이 테이블은 ID, name, dept_name, salary 와 같은 네 개의 열(column) 을 가지고 있따. course_id 테이블의 각 행(row)은 교수의 ID, name, dept_name, salary 로 구성된 한 명의 교수에 관한 정보를 저장하고 있다. 교수 개개인은 ID 값에 의해서 구별되며, 각각의 과목은 course_id 에 의해서 구별되는 것에 주의를 기울여야 한다.
    prereq 테이블은 각 수업의 선행 과목 정보를 저장한다. course_id prereq_id 의 두개의 열을 가지고 있다. 각 열은 두 개의 수업으로 이루어져 있는데, 두 번째 열의 수업이 첫 번째 열의 수업의 선행과목이다.
    이처럼 prereq 테이블의 행은 두 수업이 관련이 있고, 하나의 수업이 다른 수업의 선행과목이라는 것을 의미한다. 또 다른 예로, instructor 테이블을 볼 수 있다. 이 테이블의 각 행은 특정 ID 와 나머지 nama, dept_name, salary 값이 서로 연관되어 있다고 생각할 수 있다.
    일반적으로 테이블의 각 행은 일련의 값 사이의 관계(relationship)를 표현한다. 





    테이블이란 이러한 관계들의 모임이므로, 테이블의 개념은 릴레이션(relation)이라는 수학적인 개념과 밀접한 관련이 있다.이와 연관되어 관계형 데이터 모델(relation data model)의 이름도 릴레이션(relation)에 기반하고 있다. 수학적 의미의 투플(tuple)은 간단한 값의 나열 혹은 값의 리스트를 의미한다. n개의 값에 관한 관계는 수학적으로 값의 n-투플로 표현된다. 즉, n개의 값을 가진 하나의 투플이 테이블에서 하나의 행이 된다.
    이처럼, 관계형 모델에서의 릴레이션(relation)은 테이블을 의미하는 단어로 사용된다. 투플(tuple)은 테이블의 행을 의미한다. 이와 비슷하게 속성(attribute)은 테이블의 을 의미한다. 
    우리는 앞으로 릴레이션 인스턴스(relation instance)라는 단어를 행들의 특정 집합을 포함하고 있는 릴레이션의 특정 인스턴스(instance)를 지칭할 때 사용할 것이다.





instructor의 인스턴스는 12명의 instructor 를 가리키는 12개의 투플을 가지고 있다.

    이 장에서 관계형 데이터 모델을 위한 다양한 개념을 설명하기 위해 많은 릴레이션을 사용할 것이다. 이러한 릴레이션은 대학교의 일부분을 표현한다. 이 릴레이션은 실제 대학교의 데이터베이스의 모든 정보를 포함하지는 않고, 설명을 위해서 간단한 형태의 릴레이션을 제공한다. 관계형 구조의 적합성에 대해서는 이후에 자세히 다룬다.

    릴레이션은 투플들의 집합이기 때문에 릴레이션에서 투플이 어떤 순서로 나타나는지는 상관없다. instructor 릴레이션에서는 투플이 정렬되어 있고 그림 2.4에는 정렬되어 있지 않지만, 이 두 그림의 릴레이션은 같은 투플의 집합을 가지고 있기 때문에 서로 같은 릴레이션이다. 설명의 편의를 위해서 앞으로 나올 대부분의 릴레이션은 첫 번째 속성으로 정렬되어 있다.

    릴레이션의 각 속성도메인(domain)이라고 하는 허가된 집합을 가지고 있다. instructor 릴레이션의 salary 속성의 도메인은 가능한 모든 salary 값의 집합이고, name 속성의 도메인은 가능한 모든 교수의 이름이다.

    모든 릴레이션 r에 대해서 r의 모든 속성의 도메인은 원자적(atomic)이어야 한다. 도메인이 원자적이라는 것은, 도메인의 요소(elements)가 더 이상 나누어질 수 없는 단일체라는 것을 의미한다. 예를 들어 instructor 테이블에 해당 instructor 의 전화번호를 저장하는 phone_number 라는




속성이 존재한다고 하면, phone_number 의 도메인은 원자적이지 않을 것이다. 왜냐하면, 그 도메인의 요소는 전화번호의 집합이고, 그것은 개인 전화번호라는 부분집합을 가지고 있기 때문이다. 

    중요한 것은 도메인 자체가 아니라, 데이터베이스의 도메인의 요소들을 어떻게 사용하는지에 달려있다. phone_number 속성이 하나의 전화번호를 저장한다고 가정하자. 이때, 전화번호를 국가번호, 지역번호 등과 같이 나누어서 생각한다면 이것은 원자적이지 않은 값이 된다. 하지만 전화번호를 나누어지지 않는 하나의 값으로 생각한다면 phone_number 속성은 원자적 도메인이 될 수 있다.

    널(null)값은 알려지지 않거나 존재하지 않는 값을 의미하는 특별한 값(DBMS에 따라 정의가 다르다)이다. 예를 들어 instructor 릴레이션에 phone_number 속성을 추가하는 경우, 어떤 교수는 전화를 가지고 있지 않거나, 전화번호는 있지만 데이터베이스에 저장되어 있지 않을 수 있다. 이러한 경우에는 phone_number 속성에 어떤 값도 넣을 수 없기 때문에 널 값을 사용한다. 가능하다면 널 값은 제거하는 것이 좋다. 데이터베이스의 접근이나 갱신을 하는 데 있어서 이러한 널 값이 어떤 어려움을 가져오는지에 대해서 논의할 것이다.









    


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

Chapter2 - 키  (0) 2019.04.13
Chapter2 - 데이터베이스 스키마  (0) 2019.04.13
Chapter1 - 요약  (0) 2019.04.12
Chapter1 - 데이터베이스 사용자와 관리자  (1) 2019.04.11
Chapter1 - 전문적 데이터베이스  (0) 2019.04.11