Oracle DB 기초 지식


oracle DB 사용 관련 기초 지식을 정리해 보았습니다.


현재 불친절한 SQL 프로그래밍 책을 읽으면서

Oracle DB 업무를 하면서 익힌 지식과 결합해서 내용을 정리하려고 하고 있습니다.

그 중에 1부 안에 있는 내용 중, 일부를 정리해보려고 합니다.


1.OLTP VS OLAP

두 개 모두 oline transaction / analytical processing을 각각 줄인 말로

OLTP는 데이터를 처리하는 것을 중점에 두고 있으며, 중간에 처리가 잘못 됬을 경우 다시 rollback이 되어야 합니다.

그렇기 때문에 예시로 드는 것이, 은행의 입금/출금 처리 입니다.

돈 이체 과정에서 오류가 생겼을 경우, 정상적으로 모든 process가 취소 처리가 되어야되는데

이러한 모습이 데이터 처리 중에 에러가 발생하여 모든 과정이 취소(rollback) 가 되는 모습과 동일하여 많이 사용 되는 듯 합니다.

OLAP는 이미 저장된 데이터 기반으로 분석 하는데 중점을 두고 있기에, 주로 DW(데이터 웨어하우스)가 예시로 나옵니다.

기존 저장된 데이터로 사용자의 요청, 생각에 맞게 정보를 제공 해주는 것으로 나옵니다.

더 자세한 내용은 해당 블로그 혹은 구글 검색을 통해서 보시는 것을 추천 드립니다.


2.E-R모델 (Entity Relationship model)

요구사항에서 얻어낸 정보들을 개체(Entity), 속성(Attribute), 관계(Relation)으로 기술하는 데이터 모델을 이야기 합니다.

개체는 단독으로 존재하는 객체를 의미하고, 그렇게 인식이 가능한 데이터의 집합을 의미합니다.

속성은 개체 관리 데이터의 최소 단위 이고 이 안에 도메인으로 속성 값의 범위가 존재합니다.

관계는 개체 타입 간의 관계를 의미 합니다.

데이터 논리 구조를 작성 할 때 필요한 요소들로,

자세한 내용은 해당 블로그 를 보시는 것을 추천 드립니다.


3.정규화

통계에서의 정규화(보통은 표준화라고 불리우는)는 서로 다른 단위를 가진 변수들을 변환해주는 것을 의미합니다.

DB에서의 정규화는 테이블 간의 중복된 데이터를 허용하지 않는 것을 목표로 합니다.

그렇기에 정규형 위반 릴레이션은 정합성을 보장하지 않는다고 되어있습니다.

이러한 정합성을 보장하기 위해, 보통은 테이블을 분해해서

정규화를 수행하는데 제1 정규화부터 ~ 5 정규화까지 있습니다.

일반적으로 제 4, 5 정규화는 잘 수행되지 않고, 설명되지 않아, 해당 포스팅에서도 생략합니다.


제 1 정규화는 테이블의 컬럼이 하나의 값(원자 값)을 갖도록 분해하는 것입니다.

예를 들어 보통 사람의 취미는 하나인 경우도 있고 여러개의 경우도 있습니다.

저 같은 경우도 음악 감상, 영화 보기 등등이 있는데 이를 취미 행에 넣으면 2개의 값이 들어가 있는 상태입니다.

이러한 경우가 사람마다 무수하게 다르기에 이 상태로 놔두게 되면 해당 취미 열은 하나씩 분류가 가능한 상황이지만

, 로 여러개가 기입이 되어서 관리가 힘들게 됩니다.

그렇기에, 이를 하나의 행에 기록하는 것이 아닌 2개의 행에 각각 음악감상 / 영화 보기로 나누는 것입니다.

행은 늘어날 수 있지만, 해당 열의 관리는 원활하게 되는 것입니다.


제 2 정규화는 제 1 정규화가 진행된 상태에서, 부분 종속 관계가 없도록 테이블을 분해하는 것입니다.

기본 키의 부분 키가 다른 컬럼을 온전히 결정할 수 있을 경우, 해당 부분 키와 컬럼을 분리하여 관리하는 것입니다.

그리고 제 3 정규화는 제 2 정규화가 진행된 상태에서, 이행 종속 관계가 없도록 테이블을 분해하는 것입니다.

A -> B, B -> C 가 성립할 때, A -> C가 성립되는 것을 이행 종속이라고 말합니다.

만약 B만 변경해야된다고 하면 이 A, B, C 가 모여 있으면 C도 같이 수정을 해줘야합니다.

하지만 테이블 분리가 되어있다면 A, B가 있는 테이블에서 B만 수정해주면 C는 수정을 해주지 않아도 됩니다.

그림 예시를 포함한 내용이 필요하시다면 해당 블로그를 보시는 것을 추천 드립니다.


4.Object 구분

object는 여기서 논리적 데이터 구조라고 설명을 하고 있습니다.

그리고 그 objbect의 논리적 집합을 schema(스키마)라고 합니다.

이러한 스키마가 있는 오브젝트는 테이블, 인덱스, 오브젝트 타입 등이 있으며

비 스키마 오브젝트는 사용자, 롤, 디렉토리가 있습니다.

그리고 저장공간이 필요한 오브젝트를 segment(세그먼트) 라고 하며,

세그먼트가 필요한 오브젝트는 테이블, 클러스터, 인덱스가 있으며

필요 없는 오브젝트는 뷰, 시권스, synonym, 사용자, 디렉토리 등이 있습니다.


해당 내용들이 이미 만들어진 테이블에서 SQL 구문을 작성할 때 필요한 내용이라기 보다는

하지만 DB로 데이터를 밀어넣고, 논리적 구조에 따라서 테이블들을 만들고 관리하는데

필요한 내용들이라고 생각됩니다.