TIL

데이터베이스 시스템 7th를 읽고 요약 및 정리한 글 입니다.

Chapter 02 - 관계형 모델 소개

관계형 모델은 상업용 데이터 처리 응용을 위한 주요 데이터 모델이다. 이전에 나와있던 다른 모델들(네트워크 모델, 계층형 모델)과 비교했을 때 프로그래머의 작업을 더 쉽게 만들어 줄 수 있는 단순성으로 인해 아직까지 최고의 자리를 차지하고 있다.

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

관계형 데이터베이스틑 테이블(table)의 모임으로 구성되며, 각 테이블은 고유한 이름을 가지고 있다. 이 관계형 데이터의 예시는 아래와 같다.

ID 이름 주소 연락처
1 Arclic 서울시 1234-5678
2 Barclic 경기도 1234-6789

이 테이블에서 ID가 1인 Arclic이 서울시에 거주하는 것 처럼, 일반적으로 테이블에서 각 행은 일련의 값 사이의 관계(relationship)를 표현한다. 이처럼 관계형 모델에서 릴레이션(relation)은 테이블을 의미하는 단어로 사용된다. 튜플(tuple)은 테이블의 행을 의미한다. 이와 비슷하게 속성(attribute)은 테이블의 열을 의미한다. 릴레이션의 각 속성은 도메인(domain)이라고 하는 허가된 값의 집합을 가지고 있다.

모든 릴레이션 r에 대해서 r의 모든 속성의 도메인은 원자적(atomic)이어야 한다. 도메인이 원자적이라는 것의 의미는 도메인의 요소(element)가 더 이상 나뉠 수 없는 단위라는 것을 의미한다.

2.2 데이터베이스 스키마

데이베이스에 대해서 언급할 때, 데이터베이스의 논리적 설계인 데이터베이스 스키마(schema)와, 어떤 한순간에 데이터베이스에 저장되어 있는 데이터의 스냅샷(snapshot)인 데이터베이스 인스턴스(instance)를 잘 구별해야 한다. 테이블은 일반 프로그래밍 언어에서 변수의 역할과 같다. 그리고 이 데이터베이스 스키마는 타입 정의에 해당된다. 그리고 인스턴스는 프로그래밍 언어에서 변수의 값과 비슷하다. 주어진 변수의 값은 시간에 따라 변한다. 마찬가지로, 릴레이션 인스턴스의 튜플도 릴레이션이 변경됨에 따라 변하게 된다. 하지만 일반적으로 릴레이션의 스키마는 변하지 않는다.

2.3 키

주어진 릴레이션 안에서 튜플을 구별하는 방법이 있어야 하고, 이것은 릴레이션의 속성으로 표현되어야 한다. 즉 튜플의 속성값은 그 튜플을 유일하게 식별할 수 있어야 한다. 수퍼 키(superkey)는 한 릴레이션에서 그 튜플을 유일하게 식별할 수 있도록 해주는 하나 혹은 그 이상의 속성들의 집합이다. 릴레이션 안에서 튜플을 구별하기 위한 수단으로 데이터베이스 설계자에 의해 선택된 후보 키를 지칭할 때는 주 키(primary key)라는 용어를 사용한다.


릴레이션 스키마 r1의 속성 A와 다른 릴레이션 스키마 r2의 주 키 B 사이의 외래 키 제약 조건(foreign-key constraint)은 모든 데이터베이스 인스턴스에 대해서 r1에 존재하는 각 튜플의 A 값이 r2에 있는 어떤 튜플의 B 값으로 반드시 나와야 한다는 것을 의미한다. 속성 집합 A를 r1으로부터 r2를 참조하는 외래 키(foreign key)라고 한다. 릴레이션 r1은 외래 키 종속을 가진 참조하는 릴레이션(referencing relation)이라고 부르며, 릴레이션 r2는 참조된 릴레이션(referenced relation)이라고 한다.

일반적으로 참조 무결성 제약 조건(referential integrity constraint)은 참조하는 릴레이션의 어떤 튜플의 특정 속성에 출현한 값이, 참조되는 릴레이션에서 적어도 하나의 튜플의 특정 속성으로 출현해야 한다는 것을 의미한다.

2.4 스키마 다이어그램

데이터베이스 스키마는 주 키와 외래 키 종속성을 가지고 있는데, 이는 스키마 다이어그램(schema diagram)을 이용해 시각적으로 나타낼 수 있다.

2.5 관계형 질의어

질의어(query language)는 사용자가 데이터베이스로부터 정보를 요청할 때 사용하는 언어다. 이들은 보통 표준 프로그래밍 언어보다는 고급 단계의 언어이다. 질의어는 명령형 언어, 함수형 언어, 선언형 언어로 구분할 수 있다.

  • 명령형 질의어(imperative query language)에서 사용자는 원하는 결과를 계산하기 위해 데이터베이스에 특별한 일련의 연산을 수행하도록 명령한다.
  • 함수형 질의어(functional query language)에서 계산은 데이터베이스에 있는 데이터나 다른 함수의 결과에 대해서 동작하는 함수의 실행으로 표현된다.
  • 선언형 질의어(declarative query language)에서 사용자는 원하는 정보만 기술하며 이 정보를 얻기 위한 구체적인 단계나 함수 호출을 기술하지 않는다.

SQL 질의어와 같이 실질적으로 사용되는 질의어는 명령형, 함수형, 선언형 방식의 요소를 포함한다.

Leave a comment