현재 섹션 : 웹/인터넷

관계형 데이터베이스의 개념

데이터베이스(Database)
접근, 관리가 쉽도록 조직적으로 내용이 저장된 데이터의 집합.
관계형 데이터베이스(Relation Database)
데이터의 관계 모형에 기반하는 데이터베이스. 관계형 데이터베이스 안에 있는 모든 데이터는 2차원 배열이나 테이블의 집합으로 조직화되어 있어서, 데이터를 정의, 삽입, 삭제, 수정, 갱신할 때 유용한 방법을 제공한다.
테이블(Table)
관계형 데이터베이스는 '관계'에 의해서 만들어진다. 이 관계를 일반적으로 '테이블(Table;자료들의 테이블)'이라고 부른다. MS사의 '엑셀'과 같은 스프레트시트 프로그램을 사용해 보았다면, 쉽게 이해할 수 있다. 아래는 <성경>이라는 이름을 가진 테이블을 예로 든 것이다.
< 성경 >
성경ID 제목 약어 장수 저자명 구분
1 창세기 50 모세 구약
2 출애굽기 40 모세 구약
3 마태복음 28 마태 신약
4 마가복음 16 마가 신약
5 요한계시록 22 요한 신약
행(Column)
각 '행(Column)'은 별도의 이름, 데이터형(type)을 가지고 있다. 위의 테이블에서는 '제목', '약어' 등이 행의 이름이다. 데이터형은 '성경ID', '장수' 행은 정수(int)형이고, 나머지 행의 데이터형은 문자열(string)이다. '행'은 '필드(Field)' 혹은 '속성(Attribute)'이라고도 한다.
열(Row)
각 '열(Row)'은 다른 성경을 의미한다. 각각의 성경 데이터에는 테이블에 의해서 모두 같은 속성(행,필드)이 적용된다. '열'은 '레코드(Record)' 혹은 '튜플(Tuple)'이라고도 한다.
값(Vlaue)
각 열은 행에 대응하는 개별적인 값(Value)들의 집합으로 이루어진다. 이 값들은 행의 데이터형을 따라야 한다.
키(Key)
데이터베이스는 한 개의 테이블로 구성되어 있는 경우는 극히 드물고, 대부분 여러 테이블로 구성되어 있다. 이렇게 여러 테이블 가운데, 한 테이블에서 다른 테이블을 참조할 때 사용하는 것이 바로 '키(Key)'이다.
하나의 테이블에서 각 레코드(열)를 구별하기 위해서는 모든 레코드에 동일한 값이 저장되지 않는 필드(행) 하나를 지정해 주어야 하는데, 이 때 선택된 필드를 '키(Key)', 혹은 더 명확한 의미로 '기본 키(Primary Key)'라고 한다.
<성경> 테이블에서는 '성경ID', '제목', '약어'가 기본 키로 가능하다. 장수가 같은 성경이 있을 수 있기 때문에 '장수' 필드는 기본 키로서 제대로 구실을 할 수 없고, '저자명', '구분' 필드도 마찬가지다. 이런 경우에는 가장 편리한 필드(여기서는 '성경ID')를 기본 키로 지정해 주면 된다.
외래 키(Foreign Key)
아래에서 제시한 <영어성경> 테이블은 '영어제목' 필드를 기본 키로 지정해 주면 된다. 그런데 <영어성경> 테이블을 보면 '장수', '저자명' 등의 필드가 생략되어 있다. 이것은 <성경> 테이블과 연결하여 똑같은 데이터의 중복저장을 막을 수 있기 때문이다.
이렇게 다른 테이블의 데이터를 공유해야 하는 경우에는 다른 테이블과의 '관계'를 나타내는 키(Key)가 필요한데, <영어성경> 테이블에서는 이 역할을 '성경ID' 필드가 해 주고 있다. '성경ID' 필드는 <성경> 테이블에서 기본 키로 사용되고 있다. 이렇게 다른 테이블의 데이터를 공유하기 위하여 해당 테이블의 기본 키(Primary Key)를 필드로 사용한 키(Key)를 '외래 키(Foreign Key)'라고 한다.
< 영어성경 >
영어제목 성경ID 영어약어
Genesis 1 gn
Exodus 2 ex
Matthew 3 mt
Mark 4 mk
Revelation 5 rev

스키마 (Schema)

데이터베이스의 논리 구조, 물리 구조 등을 정의하고 기술한 것을 가리켜 '스키마(Schema)'라고 한다. 스키마는 각 테이블의 필드(Field), 필드의 데이터형(Type), 키(Key) 등을 보여준다. 스키마는 데이터를 포함하지 않고, 데이터베이스의 구조만을 보여주는 것이다. 사용자의 관점에서 기술한 것을 외부 스키마, 컴퓨터의 관점에서 기술한 것을 내부 스키마, 레코드 안의 각 필드에 관한 논리 구조를 정의한 것을 서브 스키마라고 한다.

[스키마의 예] (굵은 필드명은 Primary Key, 밑줄 친 필드명은 Foreign Key)

  • 성경 (성경ID, 제목, 약어, 장수, 저자명, 구분)
  • 영어성경 (영어제목, 성경ID, 영어약어)

관계 (Relationship)

두 개의 테이블 사이에서 공통되는 필드를 연결하여 관련성을 명확히 하는 것을 '관계(Relationship)'라고 한다. 이런 관계를 설정해 주는 것이 바로 외래 키(Foreign Key)이다.

  1. 일대일 관계 : 하나의 레코드에 레코드 하나가 대응하는 것을 말한다. 위에서 예로 든 <성경> 테이블과 <영어성경> 테이블은 서로 일대일 관계이다. 일대일 관계의 두 테이블은 하나로 통합시켜도 무방하다.
  2. 일대다 관계 : 하나의 레코드에 여러 레코드가 대응하는 것을 말한다. 예를 들어, '저자명' 필드를 가진 <저자소개>라는 테이블을 <성경> 테이블과 연결한다면, 한 '저자'가 여러 '성경'을 기록한 경우도 있기 때문에 두 테이블은 일대다 관계가 된다. (<저자소개> 테이블의 한 레코드가 <성경> 테이블의 여러 레코드에 대응되는 경우)
  3. 다대다 관계 : 여러 레코드에 여러 레코드가 대응하는 것을 말한다. 예를 들어, '성경ID', '공부시간' 필드를 가진 <성경공부>라는 테이블을 <성경> 테이블과 연결한다면, 한 '공부시간'에 여러 '성경'을 공부할 수도 있고, 한 '성경'을 여러 '공부시간'에 걸쳐 공부할 수도 있기 때문에 두 테이블은 다대다 관계가 된다. (<성경공부> 테이블의 여러 레코드가 <성경> 테이블의 여러 레코드에 대응되는 경우)