DBMS는 한 가지 데이터 모델을 선택해야 한다.
데이터 모델이란?
현실세계를 단순화하고 정형화된 형태로 표현하는 방식으로 실제 데이터의 특성을 살리면서 목적에 맞는 정보만 단순화하여 표현하는 방식이다.
DBMS가 가장 많이 선택하고 있는 데이터 모델 방식은 관계형 데이터 모델(relational data model)이다.
관계형데이터모델(Relational Data Model)
관계형 데이터 모델이란 테이블 형식을 이용하여 데이터를 정의한 모델를 의미한다. 테이블은 릴레이션이라고도 부른다.
릴레이션(relation)은 수학적인 의미로 보면 두 개 이상의 집합(속성)을 구성하는 원소들의 순서쌍(튜플)으로 이루어진 집합을 의미한다. 예를들어, 이름 집합과 주소 집합이 하나의 릴레이션을 구성한다. 그리고 이름의 원소인 이지훈과 주소 집합의 원소인 서울이 모여, <이지훈, 서울>의 순서쌍이 만들어진다.
이름 | 주소 |
이지훈 | 서울 |
김광식 | 대전 |
릴레이션에서 열(Column)을 두고 속성(Attritube)라 부른다. 그리고 행(row)을 두고 튜플(Tuple)이라 부른다. 테이블 관점에서 속성은 필드(Field)라고 불리고 튜플은 레코드(Record)라 불리운다.
필드(Field)는 수학적으로 보면 집합에 해당된다. 그러므로 포함될 수 있는 원소의 범위가 있다. 필드에 입력될 수 있는 원소의 범위를 도메인(domain)이라 부른다. 필드에 입력되는 값들은 원소이므로, 분리되지 않는 원자값(atomic value)여야한다. 만약 필드에 어떤 값이 들어갈지 알지 못하는 경우 null 값을 넣어준다.
필드의 수를 차수(degree)라고 한다. 필드가 1개면 단항 테이블(Unary relation) 2개면 이항테이블(binary relation), 3개면 n항 테이블(n-ary relation) 이다.
이렇듯 도메인, 원자값, 차수까지 고려하여 필드에 대해서 정의하는 과정을 두고, 테이블 정의라 부른다. 이를 토대로 만들어지는 데이터 구조가 테이블 스키마(table schema)이다. 테이블 스키마에 실제로 레코드가 삽입되면 실재하는 테이블이 생성되는데, 이를 테이블 인스턴스(table instance)라 부른다. 이때 삽입된 레코드의 개수를 기수(cardinality)라 부른다.
테이블 특성
테이블은 두 가지 종류의 원소를 가진 집합이라 생각하면 편하다. 한 가지는 '필드', 다른 한 가지는 '레코드'이다. 그러므로 각 레코드는 집합의 특징을 갖는다.
집합은 같은 원소를 가질 수없다. 그러므로 중복되는 레코드와 필드는 가질 수 없다. 집합에서 순서는 무의미하다. 그러므로 레코드와 필드의 순서는 무의미하다. 집합의 원소는 원자값이다. 그러므로 모든 필드는 원자값을 가진다.
키(Key)
테이블에서 '순서'는 의미가 없으므로 레코드를 구분하기 위해서는 Key가 필요하다. Key는 필드로 지정된다. 여러 필드가 한 개의 Key를 구성할 수도 있다. 다른 레코드와 중복되지 않은 필드의 집합을 Key로 정한다.
키의 종류
수퍼키(Super Key) : 오로지 '유일성'만 생각한 Key이다. 유일성을 갖기 위해 불필요한 필드도 Key에 포함될 수 있다.
후보키(Candidate Key) : 수퍼키 중 불필요한 필드가 없는 최소한의 필드만으로 구성된 키
기본키(Primary Key) : 후보키 중에서 식별자로 지정한 하나의 키, 되도록이면 하나의 키로 선정하는 것이 유리함. 식별이 가능해야하므로 기본키에 null이 들어갈 수 없음.
외래키(Foreign Key)
한 테이블에 모든 정보를 담은 레코드를 저장시킬 수는 없다. 그 이유는 필드 때문이다. 테이블은 필드와 레코드의 집합이라고 말했다. 그리고 필드는 테이블의 스키마를 표현하고 레코드는 테이블의 인스턴스를 표현한다. 그러므로 필드는 테이블의 논리적 표현이고 레코드는 테이블에 저장되는 실제 데이터이다.
집합은 공통된 성격을 가진 원소들이 모여야한다. 서로 성격이 다른 필드는 같은 테이블 안에 있을 수 없다. 테이블의 성격에 따라 필드가 정해지기에 레코드에 담기는 실제 데이터도 이에따라 제한된다. 레코드가 필드에 따라 잘려나가는 것이다. 그러므로 레코드를 다시 연결해야한다. 이때의 레코드 간의 연결을 참조(Reference)라 부른다.
레코드는 잘린 데이터를 찾기 위해 다른 테이블을 참조할 수 있는 참조키를 갖는데, 그것이 외래키(Foreign Key)이다. 참조하는(Referencing) 테이블은 외래키 필드를 갖는다. 외래키는 참조되는(Referenced) 테이블의 기본키(Primary Key)이다. 그러므로 외래키는 참조되는 테이블의 기본키와 필드 속성이 같다. 다만 다른 점은 NULL값이 들어올 수 있다. NULL 값은 참조하는 레코드의 기본키가 NULL이라는 의미가 아니라, 아직 어떤 레코드를 참조할지 결정되지 못했음을 의미한다.
관계형 데이터베이스 (Relational Database)
관계형 데이터베이스란, 관계형 데이터 모델을 기반하여 만들어진 하나 이상의 테이블로 구성된 데이터베이스를 의미한다. 데이터베이스의 관리는 DBMS가 담당한다. 그러므로 DBMS가 직접 Disk에 데이터를 저장하고 읽어오고 할 것 같지만 실상은 그렇지 않다.
이전 포스팅에서도 다루었듯, DBMS와 Disk 사이에는 OS의 파일시스템이 존재한다. 그러므로 데이터베이스는 테이블을 생성, 읽기, 삭제, 수정(CRUD) 일을 '직접 물리적으로' 하는 것이 아니라 OS에게 CRUD 서비스를 '요청'하는 것이다. 그러므로 실질적이고 물리적인 CRUD 작업은 OS의 파일시스템이 담당한다.
한마디로 데이터베이스란 Disk에 저장된 데이터들을 추상적인 데이터 모델로 표현한 일종의 프로그램이다. 데이터베이스는 응용프로그램들의 Disk 접근을 제어하고 논리적인 테이블 형태로 데이터를 표현하는 '서비스'를 사용자에게 제공하는 프로그램이다. 그러므로 관계형 데이터베이스는 관계형 데이터 모델로 파일시스템이 읽어온 데이터를 표현하는 DB 프로그램이다.
테이블마다 테이블 스키마가 있고 테이블마다 테이블 인스턴스가 있다. 그러므로 데이터베이스 스키마는 테이블 스키마의 집합이고 데이터베이스 인스턴스는 테이블 인스턴스의 집합이다. 일반적으로 데이터베이스라 하면 데이터베이스 인스턴스를 의미한다.
'DB > DB Basic' 카테고리의 다른 글
[DB] Oracle의 구조 (0) | 2021.06.24 |
---|---|
[DB] 관계해석(Relational Calculus) (0) | 2021.06.24 |
[DB] 파일시스템 (0) | 2021.06.24 |
[DB] 데이터베이스의 정의 (0) | 2021.06.24 |
[DB] 관계대수 (Relational Algebra) (0) | 2021.06.24 |