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