Notice
Recent Posts
Recent Comments
«   2026/05   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
Tags
more
Archives
Today
Total
관리 메뉴

CogandKim

MongoDB - RDBMS(관계형데이터베이스) 본문

MongoDB

MongoDB - RDBMS(관계형데이터베이스)

김정출 2016. 6. 2. 14:26


MongoDB - RDBMS(관계형데이터베이스)




관계형 데이터베이스란?


관계형 모델은 관계형 데이터베이스 시스템의 기본이다.

관계형 모델을 통해서 데이터를 어떻게 생성하고 유지, 저장, 검색할 지를 정의한다.

관계형 모델은 어떠한 값들의 조합과 여러 가지 값에 대한 조건을 나타내는 변수들을 서술한 논리의 집합이다.


관계형 모델의 개념

일정한 시점에서 DB의 내용은 여러 가지 값과 이와 관련된 관계들로 구성된다.

관계형 모델은 질의(Query)를 수행하고 데이터를 지정하는 방법을 제공해야 한다.

즉 DB가 어떤 정보를 포함하는지, 사용자가 어떤 정보를 얻기 원하는 지, 질의를 통해서 데이터를 저장하는 구조가 어떻게 되는 지를 나타내야 한다.


튜플(Tuple)

튜플은 속성(Attribute) 값 들이 정렬되지 않은 세트


속성(Attribute)

속성 이름과 타입 이름으로 구성된다. 열(Column)로 가정하면 된다.


테이블의 데이터 구조는 열에 대한 정의들이 나열된 목록으로 볼 수 있다.

속성 값은 속성 타입에 지정한 유효한 값을 의미하며, 특정 행과 열의 개체를 의미한다.


일반적으로 관계라고 하면, 열의 정의 세트들로 구성된 테이블 구조를 의미하며, 이는 헤딩(Heading)과 바디(Body)로 구성된다.

헤딩은 속성들의 세트이고, n개로 구성되는 바디는 n개의 튜플(tuple)로 구성된다.

따라서 관계형 모델은 n개의 tuple 세트로 정의된다.


테이블은 관계들을 시각적으로 나타낸 것이며, 일반적으로 관계를 대신해서 사용된다.

튜플은 하나의 행이 된다.


SQL 언어에서 테이블을 구성하는 행과 열은 정렬되어야 한다.

관계형 변수(Relation Variable)는 관계 모델이 구성되어 있을 때 특정 관계형 타입을 가지는 변수를 의미한다.


사용자가 관계형 DB에 데이터를 요청하기 위해서 질의(Query)를 수행하면, DB는 질의에 대응되는 결과 세트를 사용자에게 반환한다.


파일 관계에서 파일을 검색할 때 검색 수단으로 사용하는 데이터 항목이 키(Key)이다.

이 키에 의해서 개체와 레코드를 구별할 수 있으면, 이 키를 기본 키 또는 주 키(Primary key)라고 한다.

레코드 그룹을 식별할 수 있는 데이터 항목은 2차(Secondary) 키라고 한다.



관계형 DBMS의 구성 요소와 설계


RDBMS은 다음과 같은 4가지 구성 요소들로 동작한다.


RDBMS 구성 요소

인터페이스 드라이버 Interface Driver

인터페이스 드라이버는 사용자나 응용프로그래머의 스키마(Schema)를 수정할 수 있고 콘텐츠도 수정 가능하다. 드라이버는 SQL의 상위에 있고, Prepare 문과 Execute 문을 수행하는 방법을 제공한다.

인터페이스 드라이버에는 DDL, DCL, DML, ODBC, JDBC가 있다.

이외에 MySQL 은 PHP나 Python 등과 같은 특정 언어 고유의 인터페이스를 제공한다.


SQL 엔진 SQL Engine

SQL 질의를 해석하고 실행한다.

주요 모듈은 다음과 같다.

> 컴파일러(Compiler)

SQL 문의 데이터 구조를 생성하고 질의에 대한 문법 검사를 수행한다.

> 옵티마이저(Optimizer)

질의 실행 속도를 최적화하고자 컴파일러에 의해서 생성된 데이터 구조를 파이프라인화한다.

최적화를 위해서 메타데이터(meta-data)와 통제 정보들을 활용하여 어떤 동작 시퀀스를

사용해야 하는 지 확인한다.

> 실행 엔진(Execution Engine)

옵티마이저에 의해서 선택된 질의 계획(Query plan)에 매 단계별로 수행된다.

실행 엔진 중 하나로서 레코드를 검색하거나 저장하려면 관계형 엔진과 연동하여 수행한다.


트랜잭션 엔진 Transaction Engin

트랜잭션 엔진은 그룹 형태로 수행되는 DB의 읽기/쓰기 동작의 시퀀스를 의미


ACID 특성은 다음과 같다.


트랜잭션에서 동시 접근 관리자는 데이터를 동시에 접근하고자 할 때 래치(Latch)와 뮤텍스(Mutex), 락(Lock)을 사용하여 동기화를 보장한다.

Latch와 Mutex는 동기화가 짧은 시간 동안 이루어져야 할 때 사용하며,

Lock은 긴 시간 동안 동기화가 이루어져야 할 때 사용한다.


로그 관리자는 트랜잭션의 원자성과 내구성을 보장한다.

로그 관리자가 사용하는 로그 중 Undo 로그는 트랜잭션이 시작된 이후에 트랜잭션 롤백(Roll-back)이 일어났을 때 이전 상태로 되돌아갈 수 있도록 해준다.

그리고 Redo 로그는 모든 커밋(Commit, 트랜잭션의 적용이 완료되어 그 종류를 요구하는 동작)된 트랜잭션들에 크래시(Crash)가 발생하였을 때 복구할 수 있도록 해준다.


복구 관리자는 저장 매체 내의 이미지의 섀도 페이징(Shadow paging)과 Redo 로그 파일을 사용하여

DB의 복구를 수행한다.


저장 엔진 Save Engine

저장 엔진은 데이터 레코들을 검색하고, 저장할 수 있는 기능을 지원한다. 레코드 이외에 Undo 로그와 Redo 로그, Lock, 테이블(table)과 같은 제어 정보와 메타데이터를 저장한다.



앞에서 제시된 RDBMS의 4가지 구성 요소들은 DRDB(Disk Resident Database System)에 적용된다.

MMDB(Main-Memory DataBase)나 NDB(Network DB)는 DRDB의 요소 대부분을 가지지만, 다를 수 있다.


관계형 DB 모델에서는 관계형 테이블 구조와 색인, 뷰를 생성하는데, 논리적인 설계 단계에서 설계자는 연산 속도를 향상시키기 위해 적당한 색인을 사용할 수 있다.

색인(Indexing)을 통해서 논리적으로 정리된 데이터에 접근할 수 있기 때문이다.

뷰 또한 시스템의 처리 속도를 높이고자 사용하며, 보안 목적으로도 사용할 수 있다.

하지만 관계형 DB 모델에서는 DB에 접근하기 위해서 뷰를 사용하지 않아도 된다.


DB 설계자는 논리적인 설계뿐 만 아니라 물리적인 설계도 수행한다.

물리적 설계는 DB에 의해서 사용될 특정한 저장 방법과 접근 방법을 정의한다.

이는 운영체제와 관련이 있으며, 버퍼의 크기와 탐색 시간, 섹터와 블록 크기, 페이지 프레임 크기와도 관련이 있다. 저장될 데이터의 양을 결정하고 이에 대한 성능을 평가하고, 응용 요구를 만족시켜야하기 때문에 정확하게 파악해야 한다.

물리적인 설계는 통신 매체의 성능에 의해서 전체 시스템 성능이 결정된다.


또한, 관계형 엔진은 필드(Field)와 테이블(Table), 색인(Index), 표현 엔진(Expression engine)을 지원한다.


* 색인(Indexing)

색인은 DB 내부의 테이블에서 원하는 정보를 빨리 찾고자 데이터의 위치 정보를 담아놓은 객체이다.

색인은 항상 정렬되어 있어야 한다. 항상 정렬된 위치의 정보를 사용하기 때문에 색인을 사용하면 사용자가

원하는 정보를 빨리 찾을 수 있다. 색인을 구성하려면 기본적인 내부 구조와 동작 원리를 제대로 파악해야 만 한다.


색인은 3가지 레벨로 구성된다.

루트 레벨(Root Level)

중간 레벨(Intermediate Level)

리프 레벨(Leaf Level)

루프 레벨과 중간 레벨은 색인 페이지 정보가 있으며, 리프 레벨에는 색인 키 값에 대한 실제 데이터 위치 정보가 있다. 색인은 색인 순차 편성 파일과 마찬가지로 레코드의 위치를 가리키는 색인을 만들고, 색인으로 DB 내의 레코드를 추출한다. 색인에서는 DB를 검색하기 이전에 색인 테이블에 저장된 색인 파일을 읽어서 레코드가 저장된 페이지 번호를 찾아낸다.


SQL과 DB 언어

RDBMS는 기본 구성 동작을 위해서 SQL이라는 언어를 사용한다.

SQL은 DB를 관리하는 프로그래밍 언어이다. SQL의 핵심은 데이터의 추출과 삽입, 갱신, 삭제 동작이며,

데이터를 관리하는 것에 있다. SQL은 DB의 데이터를 관리하고 접근하는 데 SQL/CLI(Call Level Interface)를 이용한다.


비록 SQL 문법과 함수가 DBMS에 따라서 약간의 차이는 있지만,

SQL은 가장 대표적인 질의 언어이다. 이와 더불어 객체형 모델을 위해서는 OQL(Object Query Language)이 제공된다. OQL은 모든 객체형 DBMS에서 사용하지는 않지만, 상당 수의 객체형 DBMS에서 사용하고 있다.


DB 언어의 종류

데이터베이스를 정의하고 저장된 데이터베이스 접근을 지원하여 효율적으로 사용하고자 DB 언어를 사용한다. DB언어는 기능에 따라서 데이터 정의 언어(DDL: Data Definition Langauge)와 데이터 조작 언어(DML: Data Manipulation Langauge), 데이터 제어 언어(DCL: Data Control Language)가 사용된다.




DDL

데이터 구조를 정의하고자 사용하는 것으로서 개념 스키마와 외부 스키마를 정의하고, 스키마나 서브 스키마의 구조를 정의할 수 있다. 사용자의 데이터 모델을 구성하는 세트들과 레코드, 필드들은 DDL을 통해서 작성된다.


또한, DDL은 SQL문의 서브 세트를 구성하며, 다음 SQL 문을 지원한다.


CREAT: 데이터 베이스 객체 정의

CREATE TABLE [테이블 이름] ([칼럼 정의][매개 변수] ... );


CREATE TABLE person (

id INTEGER PRIMARY KEY,

first_name CHAR(50) NULL,

last_name CHAR(75) NOT NULL,

dateofbirth DATE NULL

);


DROP: 데이터 베이스 객체 삭제

DROP TABLE [테이블 이름];


DROP TABLE person;


ALTER: 데이터베이스 객체 정의 변경

ALTER [객체타입] [객체이름] [매개변수]


ALTER TABLE sink ADD bubbles INTEGER;




DML

DB의 데이터를 관리하고 조작하는 데 사용하는 언어이다. DB에서 데이터를 삽입하고, 삭제하고, 갱신하는데 사용한다. DML은 다음과 같은 SQL 문이 있다. DML은 대화식 질의어와 데이터 부속어로 구분한다.

SELECT: 테이블 데이터의 검색 결과 집합 확보

SELECT * FROM [테이블명];

SELECT [컬럼] FROM [테이블] WHERE [조건];


INSERT: 행 데이터나 테이블 데이터 삽입

INSERT INTO [테이블이름] (컬럼1,컬럼2,...) VALUES (값1,값2,...);


INSERT INTO user_info (name,age) VALUES ("KIM JEONGCHUL",26);

UPDATE: 갱신 작업 수행


UPDATE [테이블이름] SET [칼럼이름] = VALUE WHERE [[조건]];


UPDATE user_info SET name="DEFAULT" WHERE name is null

DELETE: 테이블에서 특정 행 삭제

DELETE FROM [테이블이름] WHERE [[조건]];


DELETE FROM person WhERE name='KIM JEONGCHUL';




DCL

데이터 또는 데이터베이스 서버를 제어하기 위해서 사용된다.

대표적인 것으로 다음과 같은 SQL 문이 있다.


GRANT: 특정 작업 수행 권한 부여

GRANT [시스템권한 | 객체권한 ];


GRANT SELECT, UPDATE

ON person

TO some_user;

COMMIT: 트랜잭션 실행 / ROLLBACK 트랜잭션 취소

START TRANSACTION;

UPDATE Account SET amount=amount-200 WEHRE acount_number=1234;

IF ERRORS=0 COMMIT;

IF ERRORS<>0 ROLLBACK;






SQL 언어의 구성 요소



SQL문의 동작 과정

DB에서 데이터를 조회하고자 대표적인 SQL 문인 SELECT을 실행하였을 때 살펴봐야 한다.


사용자는 먼저 트랜잭션을 수행하고, DBMS는 트랜잭션을 시작하기 위하여 하나의 비어 있는 슬롯을 할당하여 사용자에게 알려준다. 그리고 사용자가 SELECT문을 실행하면, DBMS는 이 요청을 분석하여 데이터 구조로 변경한다. DB에서 테이블과 필드 이름이 존재하는 지를 검사하고 나서, 문장을 실행하기 위한 최적의 방법을 찾아낸다. DBMS는 관계형 엔진을 사용하여 문장을 수행하고, 버퍼 관리자를 사용하여 메모리 안에 이미 데이터가 있는 지를 확인한다.


이러한 동작이 이루어지고 나서, 파일 관리자를 통해서 페이지를 메모리에 로드하고 질의문이 제대로 되었는지를 검증한 이후에 트랜잭션의 고립화 정도에 맞추어서 레코드에 락(Lock)을 건다.

이 동작이 끝나면, DBMS는 레코드를 검색하여 응용 프로그램에 전송한다. 사용자가 트랜잭션 커밋(Commit)을 수행하면, DBMS는 모든 락을 풀고 트랜잭션 슬롯도 반환한다.




관계형 DBMS 개발 과정

RDBMS는 다음과 같은 과정을 거쳐 개발된다.

먼저, 어떠한 데이터 구조가 필요한지를 파악하고 데이터와 태스크를 정의한다.

그러고 나서 ER(Entity Relationship) 다이어그램을 통해서 개발될 RDBMS 모델을 상세하게 구성한다.

이러한 데이터 모델링(개념적, 물리적, 논리적 모델링)을 통해서 현실 세계를 DB로 표현할 수 있다.

개념적 데이터 모델링 단계에서 분석이 이루어지고 그 결과로 ER 다이어그램이 만들어진다.

물리 모델과 논리 모델, 두 가지를 지원하는 RDBMS 모델은 데이터 사양과 데이터 사전을 기반으로 추상 코드를 생성하고, 변경 관리 제어를 사용하여 테스트를 수행한다.




관계형 DBMS 개발 과정

RDBMS는 먼저, 어떠한 데이터 구조가 필요한 지를 파악하고 데이터와 태스크를 정의한다.

그리고 나서, ER(Entity Relationship) 다이어 그램을 통해서 개발된 RDBMS 모델을 상세하게 구성한다.

이러한 데이터 모델링(개념,물리,논리적 모델링)을 통해서 DB로 표현할 수 있다.


ER 다이어그램

RDBMS에서 ER 다이어그램으로 표현할 때는 어떤 개체(Entity)가 중심적인 역할 담당을 하는지 잘 따져야한다.

사용하는 관계의 종류는 대부분 M:1의 관계이며, 나머지는 M:N, 1:1 이 있다.


ER 다이어그램은 개체(Entity)와 속성(Attribute), 관계(Relation)로 표현된다.

> 개체 : 특정한 데이터를 가지며, 어떤 동작을 수행할 수 있는 하나의 단위나 개념

>속성 : 개체가 가지는 여러 가지 성질이나 특성(feature)

> 관계 : 개체의 관계, 속성 사이의 관계


ER 다이어그램은 개념적 데이터 모델링 도구이자, 데이터 분석의 모델링 도구이다.

조직이나, 시스템에서 사용하는 자료구조를 정의하고 관계를 나타낸다.

또한, 정보체계를 시각적으로 표현하기 때문에 모델링에 대한 의사소통을 담당할 수 있다.

데이터 모델은 개체 타입과 관계를 바탕으로 나타내므로, 관계형 DB에서는 하나의 테이블이 ER 다이어그램의 각 개체와 관계로 표현된다


ER 모델을 나타내는 기본 객체는 개체이다.


ER 모델에서는 여러 가지 속성 유형을 지원한다

> 단순 & 복합 속성

> 단일(Singled-valued) & 다중(Multi-valued) 속성

> 저장된(Stored) & 유도된(Derived) 속성


각 개체는 각 속성에 대해서 자신만의 값을 가진다.

개체 타입은 같은 속성들을 가지는 개체들의 집합으로 정의된다.

데이터베이스에서 각 개체 타입은 개체 이름과 해당 속성 목록으로 기술된다.

DB 내에서 특성 개체 타입을 가지는 개체들을 모두 일컬어 개체 집합이라고 한다.

개체 타입은 집합 내에서 서로 다른 값을 가지는 하나의 속성을 가지고 이를 키(Key) 속성이라고 한다.

이 키 속성을 통해서 각 개체를 유일하게 식별할 수 있다.


ER 모델에서 관계 타입(Relationship type)은 개체 타입들에 속하는 개체 사이에 관계 집합을 정의한다.

관계 타입은 관계 집합에 참여하는 개체들의 가능한 조합을 제한하는 제약 조건을 가진다.

제약 조건들은 관계가 표현하는 상황에서 결정되며, 카디널리티 비율(Cardinality ratio)과 참여(Participation) 제약 조건 구분


* 카디널리티(Cardinality) : 관계에 참여하는 하나의 개체에 대해 다른 개체형에서 몇 개의 개체가 참여하는지 나타낸다.


관계형 DB는 개념 스키마를 관계 모델로 사상한 이후에 분석을 통해서 관계를 설계한다.

관계를 설계하고 나서 여러 가지로부터 파생한 관계들을 분석하여 종속성을 찾아내고, 이를 정규화 과정을 통해 제거한다.


정규화 과정

정규화 과정은 개념적 모델링과 논리적 모델링 단계의 다리 구실을 하고, 논리적 설계를 통해서 개념적 모델을 구현하는 데 사용하는 DBMS에 알맞은 형태로 변환하는 작업을 수행한다.

관계의 정규화(Normalization)는 중복을 최소화하고 삽입과 삭제, 수정을 최소화하기 위해서 함수 종속성과 기본 키를 기반으로 주어진 관계 스키마를 분석하는 과정이며, 관계를 여러 개로 분해하여 설계하는 방법이다.


* 키 : 주어진 어떤 관계에서 튜플을 유일하게 식별할 수 있는 속성의 집합을 키(Key)라고 한다.

> 기본 키(주 키) :  어떤 관계 R에서 튜플 내에서 유일한 값을 가져서, 튜플을 식별하는 데 사용하는 키이다. 후보 키 중에서 선택한 하나의 속성이나 속성 그룹을 의미한다. 기본 키를 선정하려면 대표성이 있어야 하고 활용도가 높고 길이가 짧아 한다.


> 대체 키 : 최소성과 유일성을 만족하면서 기본 키의 역할을 대체할 수 있는 키


> 복합 키 : 하나의 속성으로는 기본 키가 될 수 없을 때, 둘 이상의 열을 묶어서 식별자로 정의한 키


> 슈퍼 키 : 유일성은 있지만, 최소성이 없는 키를 의미한다.


> 후보 키 : 어떤 관계 R의 모든 튜플에 대한 최소성과 유일성을 만족하는 키이다. 각 인스턴스를 유일하게 구분할 수 있는 속성이며, 이 후보 키는 기본 키가 될 수 있는 후보 속성을 가진다.


> 외래 키(참조 키) : 어떤 관계 R1이 갖는 속성들의 집합을 FK라고 할 때, R1의 FK는 다른 관계 R2에 정의된 기본 키가 PK가 되고, 이 때 A는 R1의 외래키가 된다.



RDBMS의 대안

관계형 데이터 모델과 객체 지향 데이터 모델의 장점을 기반으로 한 솔루션으로 객체 관계형 데이터베이스 관리 시스템(ORDBMS)이 있다.


RDBMS에서는 복잡한 형태의 데이터를 BLOB이라는 데이터 덩어리로 저장하기 때문에, 내용물 해석을 통해 자료를 관리할 수 없다.

따라서 기본 엔진이 데이터를 저장하고 처리하는 최적의 방법을 이해하지 못해서 효율이 떨어질 수 있다.


대용량의 비정형 데이터를 효율적으로 처리하려면 객체관계형 DBMS에서 기존의 관계형 DBMS 가 제공하던 기능 이외에 다음과 같은 추가 기능을 제공해야 한다.


확장 가능한 자료형 시스템

사용자 정의 자료형과 이를 조작할 수 있는 사용자 정의 함수들을 제공한다.

확장 가능한 색인 시스템

새로운 자료형들을 효율적으로 검색할 수 있도록 새로운 색인 방법들을 추가할 수 있다.

질의 최적화

사용자 정의 색인을 활용하고 사용자 정의 함수를 효율적으로 실행시킨다.

























'MongoDB' 카테고리의 다른 글

Mongo DB - Mongo DB Intro(2)  (0) 2016.06.02
Mongo DB - Mongo DB Intro(1)  (0) 2016.06.02
MongoDB - DB Classification  (0) 2016.06.02
MongoDB - DB의 기본(2)  (0) 2016.06.02
MongoDB - DB의 기본  (0) 2016.06.02