데이터베이스 스키마(database schema) 와 트랜잭션(Transaction)관련 기본 개념 정리
1. 스키마 (schema)
스키마(schema)는 계획이나 도식을 가리키는 영어 낱말이며 데이터베이스 스키마((database schema)의 경우 자료를 저장하는 구조와 표현법을 정의한 것을 뜻한다
[ 정의 ]
-
DB내에 어떤 구조로 데이터가 저장되는가를 나타내는 데이터베이스 구조
- 데이터베이스의 구조와 제약 조건에 관한 전반적인 명세를 기술한 메타데이터의 집합이다
-> 데이터베이스에서 자료의 구조, 자료의 표현 방법, 자료 간의 관계를 형식 언어로 정의한 것임 - 데이터베이스를 구성하는 데이터 개체(Entity) , 속성(Attribute) , 관계(Relationship) 및 데이터 조작 시 데이터 값들이 갖는 제약 조건 등에 관해 전반적으로 정의한다
- DBMS가 주어진 설정에 따라 스키마를 생성하며 데이터베이스 사용자가 자료를 저장/조회/삭제/변경할 때 DBMS는 자신이 생성한 스키마를 참조하여 명령을 수행한다
- 사용자의 관점에 따라 외부 스키마, 개념 스키마, 내부 스키마로 나눠진다 (=3층구조)
[ 특징 ]
- 데이터 사전(Data Dictionary)에 저장되며, 다른 이름으로 메타데이터라고도 한다
- 데이터 사전 이란
- 시스템 전체에서 나타나는 데이터 항목들에 대한 정보를 지정한 중앙 저장소이다
- 위 정보들에는 항목을 참조하는 용도의 식별자, 항목에 대한 엔티티의 구성요소, 항목이 저장되는 곳, 항목을 참조하는 곳 등이 포함되어있다
- 데이터 사전 이란
- 현실 세계의 특정한 한 부분의 표현으로서 특정 데이터 모델을 이용해서 만들어진다
- 시간에 따라 불변인 특성을 갖는다(= 시불변성)
- 데이터의 구조적 특성을 의미하며, 인스턴스에 의해 규정된다
[ 구조 ]
1) 외부 스키마 = 사용자 뷰(View)
-
사용자나 응용 프로그래머가 개인의 입장에서 필요한 데이터베이스의 논리적 구조를 정의한 것
- 외부 스키마 = 서브스키마(Sub Schema)
-> 서브 스키마 : 전체 데이터 베이스의 한 논리적 부분 - 실세계에 존재하는 데이터들을 어떤 형식, 구조, 배치 화면을 통해 사용자에게 보여줄 것인가를 정의
- 하나의 데이터베이스에 여러개의 외부 스키마가 존재 가능하다
또는 하나의 외부스키마를 여러개의 응용프로그램이나 사용자가 공용하여 사용 가능하다 - 같은 데이터베이스에 대해서도 서로 다른 관점을 정의할 수 있도록 허용된다
- 일반 사용자는 질의어를 이용하여 DB를 쉽게 사용할 수 있다
- 응용 프로그래머는 C, JAVA등의 언어를 사용하여 DB에 접근한다
2) 개념 스키마 = 전체적인 뷰(View)
-
조직체 전체를 관장하는 입장에서 DB를 정의한 것
- 데이터베이스의 전체적인 논리적 구조를 정의한다
- 데이터베이스에 실제로 어떤 데이터가 저장되었으며 데이터간의 관계를 어떻게 되는가
- 모든 응용프로그램이나 사용자들이 필요로하는 데이터를 종합한 조직전체의 데이터베이스
- 개체간의 관계와 제약조건 명시
- 데이터베이스의 접근 권한 보안 및 무결성 규칙에 관한 명세를 정의
- 단순한 스키마라고 하면 개념 스키마를 의미한다
- 데이터베이스 관리자 (DBA)에 의해 구성된다
- 데이터베이스 당 하나만 존재한다
3) 내부 스키마 = 저장 스키마(Storage Schema)
-
물리적인 저장장치 입장에서 DB가 저장되는 방법을 기술한 것
- 데이터베이스의 물리적 저장구조를 정의
- 디스크에는 어떤 구조로 저장할 것인가 등 데이터의 실제 저장방법을 기술
-> 실제로 저장될 내부레코드 형식, 내부레코드의 물리적 순서, 인덱스의 유/무 등을 나타낸다 - 물리적인 저장장치와 밀접한 계층이다
- 시스템 프로그래머나 시스템 설계자가 보는 관점의 스키마이다
- 실무적으로 내부 스키마에 의해 DB의 실행속도가 결정적으로 영향을 받기 때문에 DB의 구축 목적에 따라 내부 스키마를 결정해야 할 필요가 있다
2. 트랜잭션 (Transaction)
트랜잭션(Transaction)이란, 데이터베이스의 상태를 변화시키기 해서 수행하는 작업의 단위를 뜻한다
[ 정의 ]
- 데이터베이스의 상태를 변환시키는 하나의 논리적 기능을 수행하기 위한 작업의 단위, 또는 한꺼번에 모두 수행되어야 할 일련의 연산들을 의미한다
-> 작업 단위 : 많은 질의어 명령문들을 사람이 정하는 기준에 따라 정하는 것 - 데이터베이스 시스템에서 병행 제어 및 회복 작업 시 처리되는 작업의 논리적 단위이다
- 사용자가 시스템에 대한 서비스 요구 시 시스템이 응답하기 위한 상태 변환 과정의 작업단위이다
- 관리자나 개발자가 하나의 트랜잭션 설계를 잘하는 것이 데이터를 다루는 것에 많은 이점을 가져온다
- 하나의 트랜잭션은 Commit되거나 Rollback된다
-> 트랜잭션은 커밋(Commit) 전에 언제든지 수동으로 롤백(Rollback)될 수 있다 -
현재 대부분의 관계형 데이터베이스 관리시스템은 트랜잭션 데이터베이스이다
- 간단한 트랜잭션은 아래 양식의 SQL 언어로 데이터베이스 내에서 실행된다
- Begin the transaction
- Execute several queries (DB내 갱신이 아직 적용되지 않는다)
- Commit the transaction (트랜잭션이 성공적이며, 갱신이 실제 적용됨)
[ 특징 ]
-
원자성 (Atomicity)
- 트랜잭션이 데이터베이스에 모두 반영되던가, 아니면 전혀 반영되지 않아야 한다
- 트랜잭션은 사람이 설계한 논리적인 작업 단위로서 일처리는 작업단위별로 이루어져야 사람이 다루는 것에 무리가 없기때문이다
- 따라서 트랜잭션 내의 모든 명령이 완벽히 수행되지 않고 어느하나라도 오류가 발생하면 트랜잭션 전부가 취소되어야 한다
-
일관성 (Consistency)
- 트랜잭션의 작업 처리 결과가 항상 일관성이 있어야 한다
- 트랜잭션이 진행되는 동안에 데이터베이스가 변경되더라도 업데이트 된 데이터베이스로 트랜잭션이 진행되는 것이 아니라, 처음에 트랜잭션을 진행하기 위해 참조한 데이터베이스로 진행된다
- 각 사용자가 일관성 있는 데이터를 볼 수 있도록 처리하기 위함임
- 시스템이 가지고 있는 고정요소는 트랜잭션 수행 전과 트랜잭션 수행 완료 후의 상태가 같아야 한다
-
독립성 (Isolation)
- 둘 이상의 트랜잭션이 동시 실행되고 있을 경우 어떤 하나의 트랜잭션이라도 다른 트랜잭션의 연산에 끼어들 수 없다
- 하나의 특정 트랜잭션이 완료될 때까지, 다른 트랜잭션이 특정 트랜잭션의 수행 결과를 참조할 수 없다
-
지속성 (Durability)
- 트랜잭션이 성공적으로 완료되었을 경우, 그 결과는 시스템이 고장나더라도 영구적으로 반영되어야 한다
(위 특징들의 첫글자를 따 ACID 라고 부르기도 한다)
[ Commit ]
- 하나의 트랜잭션이 성공적으로 끝남 + 데이터베이스가 일관성 있는 상태에 있을 때 하나의 트랜잭션이 끝났다 라는 것을 관리자에게 알려주기 위해 사용되는 연산
- 이 연산을 사용하면 수행했던 트랜잭션이 로그에 저장된다
- 후에 Rollback 연산을 수행했었던 트랜잭션 단위로 하는 것을 도와준다
[ Rollback ]
- 하나의 트랜잭션 처리가 비정상적으로 종료되어 데이터베이스의 일관성을 깨트렸을 때, 해당 트랜잭션의 일부가 정상적으로 처리되었더라도 트랜잭션의 원자성을 구현하기 위해 사용한다
- 비정상 종료된 해당 트랜잭션을 재시작하거나 트랜잭션의 부분적으로만 연산된 결과를 취소(폐기)한다
- 후에 사용자가 트랜잭션 처리된 단위대로 Rollback을 진행할 수도 있다
[ 트랜잭션의 상태 ]
-
활동(Active)
-> 트랜잭션이 실행중인 상태 -
실패(Failed)
-> 트랜잭션 실행에 오류가 발생하여 중단된 상태 -
철회(Aborted)
-> 트랜잭션이 비정상적으로 종료되어 Rollback 연산을 수행한 상태 -
부분 완료(Partially Committed)
-> 트랜잭션의 마지막 연산까지 실행했지만, Commit 연산이 실행되기 직전의 상태 -
완료(Committed)
-> 트랜잭션이 성공적으로 종료되어 Commit 연산을 실행한 후의 상태
댓글남기기