서울대학교 이상구 교수님의 SNUON 강의 데이타베이스: 빅데이터 시대의 필수 정보관리 개론와 Database System Concepts 7th Edition의 내용을 바탕으로 정리한 내용입니다.
관계형 데이터베이스(relational database)는 객체, 혹은 객체 간의 관계를 테이블로 나타내는 데이터베이스다. 이 테이블은 행과 열로 이루어져 있는데, 각 열은 속성(attribute), 필드(field)라고도 부르고, 각 데이터가 들어있는 행은 튜플(tuple), 또는 레코드(record)라고도 부른다.
집합론에서, 집합 A에서의 이항 관계 R은 순서가 있는 A의 원소 쌍의 집합이다.
따라서 집합 A에서의 이항 관계 은 집합 의 자기 자신에 대한 카테시안 곱의 부분 집합이다.
물론 서로 다른 두 집합 사이에서도 이항 관계가 만들어질 수 있다.
집합 , , ..., 이 주어졌을 때 관계 은 의 부분 집합이다.
관계는 우리가 일상적으로 사용하는 "관계"를 표현하기 위해 사용할 수도 있지만, 관계를 이루는 순서쌍의 원소를 한 객체의 속성이라 생각한다면, 여러 속성들을 묶어 만들어진 관계는 곧 그 객체를 표현하는 것이라 생각할 수도 있다. 앞으로는 "관계"라는 말 대신 "릴레이션"을 사용하도록 하겠다.
이 속성들이라 할 때, 은 릴레이션 스키마(relation schema)이다. 릴레이션 스키마는 여러 속성들과 해당 속성들의 도메인으로 이루어져있고, 은 릴레이션 스키마 의 릴레이션이다. 릴레이션 스키마와 릴레이션의 관계는 프로그래밍 언어에서 타입과 변수의 관계와 비슷하다.
릴레이션의 인스턴스란 테이블에 의해 명시되는 릴레이션의 현재값을 말한다. 변수의 값이 시간에 따라 변할 수 있는 것과 같이, 릴레이션 인스턴스의 내용도 릴레이션이 갱신됨에 따라 변할 수 있다. 이와 달리 한편 릴레이션 스키마의 경우는 잘 변하지 않는다.
릴레이션 의 원소 는 테이블의 행으로 표현되는 튜플이다. 릴레이션은 기본적으로 집합이므로, 그 원소인 튜플에는 중복이 없어야 하고, 튜플이 어떤 순서로 정렬되어 있는지도 상관이 없다.
의 부분 집합 를 생각해보자.
는 의 값들이 가능한 릴레이션 의 유일한 튜플을 식별하기에 충분한 경우 의 슈퍼키(superkey)라고 한다. 예를 들어 대학 학사 시스템을 만든다고 해보자. 동명이인이 없다고 가정할 때 는 슈퍼키이고, 도 슈퍼키가 된다.
이때 가 최소이면, 다시 말해 이 의 진부분 집합에 슈퍼키가 없다면 는 후보키(candidate key)라고 말한다. 따라서 동명이인이 없다고 가정할 경우 은 후보키가 된다.
Q. 후보키는 항상 하나의 원소만을 가지는 집합일까?
A. 그렇지는 않다. 대학 내에는 동명이인이 있지만, 같은 학과에 동명이인이 있는 경우는 없다고 해보자. 이 경우 는 두 개의 원소를 가짐에도 후보키이다. 이 집합의 진부분 집합에는 과 가 있다. 그런데 대학 내에 동명이인이 있고 한 학과에도 여러 학생이 있다면, 이 이 둘 중 어느 것도 슈퍼키가 될 수 없기 때문이다.
DB 디자이너는 후보키들 중 대표가 될 만한 것을 골라 테이블의 기본키(primary key)로 사용한다. 이 기본키는 사려 깊게 선택되어야 하는데, 이 기본키는 테이블의 튜플들을 서로 구분할 수 있을 뿐만 아니라 웬만하면 변하지 않는 속성의 값으로 선택하는 것이 좋다. 대표적인 예로, 대학 학사 시스템에서는 학생들의 고유 식별자로 사용되는 학번을 기본키로 사용한다.
릴레이션 의 속성 에서 릴레이션 의 기본키 로의 외래키 제약 조건(foreign-key constraint)은, 어떤 데이터베이스 인스터스에서도 의 모든 튜플에서 의 값이 또한 의 어떤 튜플의 의 값이어야 한다는 것이다.
여기서 는 를 참조하는 의 외래키라고 말한다. 외래키 제약 조건에서 릴레이션 은 '참조하는 릴레이션', 는 참조되는 릴레이션이라고도 불린다.
쿼리 언어는 유저가 데이터베이스로부터 정보를 요청할 때 사용하는 언어다. 이는 좁은 의미로는 조회를 위해 사용하는 것을 가리키지만, 넓은 의미로는 DML 전체를 가리키기도 한다.
순수 쿼리 언어(pure query languages)는 의미론을 제외시킨, 간단하고 형식적인 언어로, 데이터베이스로부터 데이터를 추출하는 기본적인 테크닉들을 설명하기 위해 쓰인다. 순수 쿼리 언어에도 아래와 같이 여러 종류가 있다.
실제로 이것들을 이용해서 쿼리를 날리거나 하는 일은 거의 없겠지만, 순수 쿼리 언어는 사람들이 사용하는 쿼리 언어들 아래의 기반을 이룬다는 점에서 중요하다.
대수학(algebra)는 피연산자와 연간자에 대한 학문으로, 관계 대수(relational algebra)는 하나, 또는 둘의 릴레이션을 연산의 입력으로, 새 릴레이션을 결과로 갖는다. 여기서 쓰이는 연산에는 다음과 같은 것들이 있다.
Project Operation
- 특정 컬럼을 선택하는 연산이다
Union Operation, Set Difference Operation, Set-Intersection Operation
- 각각 합집합, 차집합, 교집합을 구할 때와 마찬가지의 연산들이다
Cartesian-Product
- 의 모든 레코드와 의 모든 레코드로 만들 수 있는, 모든 가능한 조합으로 이루어진 릴레이션을 만드는 연산이다.
Natural-Join Operation
- 카테시안 곱과 비슷하지만, 공통 컬럼에서 일치하는 레코드를 가지는 것들끼리 잇는 연산이다.
각 연산의 결과도 릴레이션이므로, 위의 연산들을 이용하면 더욱 복잡한 식들을 만들어 계산해나갈 수도 있다.