데이터베이스는 어떤 기능을 수행하기 위한 데이터들의 모임이다.
한 줄 정의
이 데이터들은 다음과 같은 4가지 특성을 가진다.
업무 수행을 위해 중복을 배제하여 통합했으며, 동시에 접근할 수 있는 저장된 자료인 데이터베이스는 다음과 같은 특징이 있다.
데이터의 종속성과 중복성은 기존 파일시스템의 문제점으로 지적되었다.
DBMS는 데이터의 종속성과 중복성을 최소화하기 위해 만들어졌으며,
사용자가 데이터베이스를 편리하게 관리할 수 있게끔 해주는 소프트웨어다.
데이터의 종속성과 중복성이 유발하는 문제점은 무엇일까?
똑같은 데이터가 엄청나게 많이 있다고 생각해보면,
저장 공간이 낭비될 것이고,
모든 데이터에 보안을 유지하기 힘들 것이다.
또한 수정될 경우 일관성을 잃어버린다.
이는 데이터의 정확성을 깨뜨리며 무결성에 위배된다.
데이터 간 종속성이 있는 경우는 어떨까?
여기서 데이터의 종속성이란 응용프로그램과 저장된 데이터의 관계다.
둘이 독립적이지 않다면 데이터 변경 시 응용프로그램도 변경해야한다.
이 문제들을 해결하기 위해 DBMS가 필요하다.
정의(Defenition)
DBMS는 데이터의 구조, 제약조건, 데이터간 관계등을 정의한다.
조작(Manipulation)
DBMS는 데이터의 검색,삽입,삭제,갱신을 처리한다.
제어(Control)
데이터의 삽입,삭제,갱신이 정확히 이루어지도록 통제하는 역할을 하며, 사용자의 권한에 맞는 데이터만 접근하도록 제어한다. 또한 여러 사용자가 동시에 데이터에 접근할 수 있도록 만들어준다.
DBMS가 기존 파일시스템의 종속성과 중복성을 해소하기 위해 나왔으므로, 여기서부터 장점을 찾을 수 있다.
1번을 논리적 독립성, 2번을 물리적 독립성이라고 표현한다.
데이터베이스를 사용하므로 여러 사용자가 동시에 접근 가능하며, 실시간으로 최신 데이터를 유지할 수 있는 것도 장점일 것이다.
통합된 데이터인 데이터베이스를 관리하므로 보안에도 용이하다.
가장 쉽게 파악할 수 있는 단점은 복잡해진다는 것이다.
그리고 데이터베이스를 관리할 수 있는 DBA가 필요하다.
데이터를 저장하기 위한 비용이 들며,
DBMS가 데이터 관련한 처리를 모두 담당하므로 과부하가 걸릴 수 있다.
그리고 백업(Backup)과 복구(Recovery)가 어려운 것도 단점이다.
Schema의 사전적 의미는 개요라는 뜻이다.
CS 분야에서 스키마는 데이터베이스의 명세(Specification)을 나타내는 설명서이다.
구체적으로 데이터베이스는 개체(Entity), 속성(Attribute), 관계(Relation)로 구성된다.
스키마는 이것들에 대한 설명서 역할을 한다.
아마 그래서 개요라는 Schema라고 명칭한 것 같다.
스키마에는 3가지 종류가 있다.
외부 스키마(External Schema)
개념 스키마(Conceptual Schema)
내부 스키마(Internal Schema)
데이터에 대한 데이터를 Meta Data라고 한다.
Schema 역시 메타 데이터로 데이터 사전 안에 저장된다.
스키마는 데이터에 대한 설명서이므로 시간이 지나도 변하지 않는다.
스키마는 가장 바깥의 외부 스키마와 가장 안쪽의 내부 스키마,
그리고 이 둘을 이어주는 개념스키마로 구성되어 있다.
일반적인 스키마는 개념스키마를 의미한다.
외부 스키마는 사용자와 가장 가까이 닿아 있는 스키마다.
그래서 사용자 뷰(View)라고도 표현한다.
외부 스키마는 사용자가 필요하는 데이터의 구조를 명시하며
여러 개가 존재할 수 있다.
데이터베이스 안의 전체 데이터들의 명세를 모아 놓은 것이다.
사용자에게 받아온 데이터들의 명세인 외부스키마 정보도 포함된다.
딱 1개만 존재하며 데이터들의 구조, 제약 조건, 관계에 대한 정보를 포함한다.
중요한 접근 권한이나 보안 및 무결성에 대한 정보도 포함되어 있다.
DBA가 보통 구성하며 데이터베이스를 구성하는 조직입장에서 정의한다.
실제 물리적으로 데이터를 저장하는 방법에 관한 정보이다.
물리적 저장장치와 관련이 깊다.
데이터베이스에 저장될 레코드들의 물리적 구조나 순서등을 정의한다.
DBMS의 3가지 기능이 정의, 조작, 제어였다.
이를 수행하기 위한 데이터베이스 언어들이 존재한다.
데이터 정의어인 DDL은 데이터의 스키마를 정의한다.
여기서 스키마는 외부 스키마이며 데이터의 구조, 제약조건, 관계, 접근방식를 수정한다.
또한 데이터베이스 안의 데이터베이스 안의 엔티티간의 매핑 관계를 정의한다.
이렇게 작성된 정보들은 데이터 사전(Data Dictionary)안에 저장된다.
DML은 사용자가 데이터를 조작할 수 있도록 만든 언어이다.
포트란, 코볼 등의 언어로 만들어져 있으며
DML을 사용하면 응용프로그램을 통해 사용자가 직접 DB에 접근할 수 있다.
대표적인 DML로 데이터베이스에 정보를 요청하는 쿼리문이 있고
이는 비절차적 데이터 언어이다.
절차적 조작 언어란 데이터를 구하는 방법을 순서에 따라 적어 놓은 것이다.
비절차적 조작 언어란 필요한 데이터만 명시하고 구체적인 방법은 적지 않는다. 코드의 효율은 떨어지는 편.
데이터 조작어는 사용자가 사용하기 편하도록 자연 언어에 가까워야한다.
또한 데이터 연산과 데이터 간 관계를 명확히 표현할 수 있어야 한다.
제어를 위한 언어인 DCL은 데이터의 무결성, 보안, 접근 권한, 회복 등을 처리한다.
주 역할은 데이터를 보호하고 관리하는 것이다.
병행수행이란 동시에 여러 트랜잭션을 처리할 수 있도록 하는 것이다.
병행수행 시 동시에 같은 데이터에 접근하게 되면 문제가 생길 수 있다.
이것을 제어하는 일을 병행제어이고 병행제어를 통해 병행수행을 제어한다.
데이터베이스를 이용하는 유저는 DBA, 응용프로그래머, 사용자가 있다.
DBA가 하는 일을 매우 다양하다.
우선 개념스키마와 내부스키마에 대해 정의한다.
그리고 DB의 백업과 복구에 대한 전략을 수립하며,
보안을 유지하기 위해 접근 권한을 설정하며
무결성을 유지하기 위한 제약조건도 정의한다.
내부스키마에는 데이터 저장 구조와 방법을 정의한다.
이 외에도 DB 성능 향상을 위한 전략을 수립하고
DB의 병목 지점을 모니터링하거나 데이터들의 통계적인 분석도 진행한다.
응용프로그래머는 호스트 언어 작성 시 DML을 넣어 일반 사용자가 데이터베이스에 접근할 수 있도록 만든다.
호스트 언어란 C, Java, Python과 같은 프로그래밍 언어이다.
사용자는 보통 터미널을 이용하며 질의어나 응용프로그램을 이용해 DB에 접근하며 데이터를 활용하는 사람들이다.