1. Database 개요
Overview
Oracle Database의 기초적인 개념에 대한 포스트
데이터베이스
어느 한 조직에서 업무 처리를 위해 다수의 응용 시스템 혹은 다수의 사용자들이 공용으로 사용하기 위해 통합 / 저장된 운영 데이터의 집합
- 통합, 저장, 공용, 운영
데이터베이스의 특징
계속적인 변화, 동시 공유, 실시간 접근성, 내용에 의한 참조, 데이터 중복의 최소화
데이터베이스의 목표
- 지속적인 데이터의 관리 및 보호
- 안전성 보장
- 무결성 보장
데이터베이스의 구성 요소
- 개체
- 현실 세계의 대상체
- 하나이상의 속성으로 구성
- 속성
- 가장 작은 논리적인 단위
- 관계
- 개체 사이의 상호 연관성
데이터 베이스의 표현
- 논리적 구조 : 사용자 관점에서 본 구조를 나타내며 사용자가 이해하고 생각하는 것을 나타내는 형태
- 물리적 구조 : 저장 장치 관점에서 본 구조를 나타내며 기계처리에 맞는 형태
스키마(Schema)
- 데이터베이스의 전체적인 구조와 제약조건에 대한 명세를 기술, 정의한 것
- 내부 스키마 : 물리적 저장 장치 관점에서 본 데이터베이스의 물리적 구조
- 개념 스키마 : 논리적 관점에서 본 전체적인 데이터 구조
- 외부 스키마 : 전체 데이터 중 사용자가 사용하는 한 부분에서 본 논리적 구조, 서브 스키마
시스템 카탈로그
- 데이터베이스에 저장되어 있는 테이블, 인덱스, 뷰, 제약조건, 사용자 등 개체들에 대한 정보와 정보들 간의 관계를 저장한 것
- 데이터 사전이라고 함
- 시스템 카탈로그에 저장되어 있는 데이터를 ‘메타 데이터‘라고 함
- 일반 테이블과 같이 시스템 테이블로 구성
- 일반 사용자도 시스템 카탈로그의 내용을 검색할 수 있지만 삽입, 삭제, 갱신은 불가
- 시스템 카탈로그 갱신은 사용자가 SQL문을 실행하면 시스템에 의해 자동적으로 이루어짐
데이터베이스 객체(Object)
- 테이블(Table)
- 행과 열로 구성된 2차원적인 표
- 시퀀스(Sequence)
- 정수형 번호표 생성기
- 인덱스(Index)
- 데이터 검색을 빨리 하기 위하여 만들어 둔 개념
- 프로시저(Procedure)
- 반환 타입이 없는 객체
- 함수(Function)
- 반환 타입이 있는 객체
데이터베이스 객체 현황 보기
conn / as sysdba
(관리자 모드로 로그인 하는 명령어)select distinct object_type from dba_objects
order by object_type;
DBMS(Database Management System)
- 데이터베이스 관리 시스템
- 데이터의 중복성과 종속성등의 문제를 최소화하기 위해 등장
- 사용자가 데이터베이스의 내용을 정의 / 조작 / 제어할 수 있도록함
- 모든 사용자나 응용프로그램들이 데이터베이스를 공유할 수 있도록 관리, 운영해주는 소프트웨어 시스템
- MySQL, MS SQL, Oracle 등
DBMS의 구조
DBMS의 주요 기능
- 데이터의 추가 / 조회 / 변경 / 삭제 기능의 구현
- 데이터의 무결성(신뢰도) 유지되어야 함
- 트랜잭션 관리 기능이 구현되어야 함
- 데이터의 백업 및 복원 가능
- 데이터 보안 기능
DBMS의 필수 기능
- 정의(Definition Facility)
- 저장될 데이터의 형태, 구조 등 데이터베이스의 저장에 관한 여러 가지 사항을 정의하는 기능
- 조작(Manipulation Facility)
- 데이터베이스의 자료를 사용자가 이용할 수 있도록 요구에 따라 검색, 갱신, 삽입, 삭제 등을 지원하는 기능
- 제어(Control Facility)
- 데이터의 정확성과 안전성 유지를 위한 관리 기능으로 데이터의 무결성 유지, 보안, 병행 수행 제어등을 제공
DBMS의 장 단점
장점
- 데이터의 중복성과 종속성을 최소화
- 데이터의 일관성 유지
- 데이터의 무결성 유지
- 사용자 간 데이터 공유 가능
- 데이터의 보안 유지 가능
- 데이터의 표준화 구현 가능
단점
- 많은 운영비 소모
- 자료 처리의 복잡
- 백업과 회복의 어려움
- 한 부분에 장애 요인이 생겼을 때 전체 시스템에 영향을 주는 취약성
데이터베이스 관리자(DBA)
데이터베이스 시스템과 관련된 모든 자원에 대해 기획/통제를 하며, 데이터베이스 언어를 이용해 DBMS를 거쳐 데이터베이스 시스템의 전체적인 관리 운영에 책임을 지는 사람이나 집단
- 역할
- 데이터베이스의 구성요소를 결정
- 저장 구조와 접근 방법을 선정
- 보안, 권한 부여, 유효성 검사 등을 수행
- 스키마 정의
- 예방, 회복 절차 수립 등을 모색
- 무결성 유지를 위한 관리
이상(Anomaly)
- 데이터베이스의 논리적 설계 시 하나의 릴레이션에 많은 속성이 존재하여 데이터의 중복과 종속으로 인해 발생되는 문제점
- 릴레이션을 처리하는데 여러 문제를 초래하게 됨
- 이상의 종류에는 삭제 이상, 삽입 이상, 갱신 이상
- 삭제 이상(Deletion Anomaly)
- 테이블에서 하나의 자료를 삭제하고자 할때 그 자료가 포함된 튜플이 삭제됨으로 인해 원하지 않는 자료가 함께 삭제가 이루어져 발생하는 문제점
- 삽입 이상(Insertion Anomaly)
- 삽입하는 과정에서 원하지 않는 자료가 삽입되거나 / 삽입하는데 자료가 부족해 삽입이 되지 않는 문제점
- 갱신 이상(Update Anomaly)
- 정확하지 않거나 일부의 튜플만 갱신되어 정보가 모호해지거나 일관성이 없어져 정확한 정보의 파악이 안되는 현상
함수적 종속(Functional Dependency)
- 종속 : 어떤 릴레이션에서 속성A, B가 있을 때, 임의 튜플에서 A값이 B값을 함수적으로 결정한다고 할때, B는 A에 함수적으로 종속되었다고 하고, 기호로는 ‘A\(\to\)B’로 표기
- B가 A에 종속되어 A값을 알면 B값을 알 수 있을 때, A를 결정자 라고 하고 B를 종속자 라고 한다
- 완전 함수 종속 : 릴레이션에서 한 속성이 오직 기본키에만 종속이 되는 경우
- 부분 함수 종속 : 릴레이션에서 한 속성이 기본키가 2개 이상 합성키(복합키)로 구성될때 일부 속성에 종속이 되는 경우
- 이행적 함수 종속 : 릴레이션에서 A, B, C 세 가지 속성 간의 종속이 A\(\to\)B, B\(\to\)C일때, A\(\to\)C가 성립이 되는 경우
정규화(Normalization)
- 논리적 설계 단계에서 발생할 수 있는 종속으로 인한 이상 현상의 문제점을 해결하기 위해, 속성들 간 종속 관계를 분석하여 여러 릴레이션으로 분해하는 과정
- 정규화된 결과를 정규형이라고 하며, 정규형의 종류로는 제 1, 2, 3, BCNF, 4, 5 정규형 등이 있음
- 제 1정규형 : 한 릴레이션을 구성하는 모든 도메인이 원자값만으로 구성되도록 하는 정규형
- 제 2정규형 : 릴레이션을 구성하는 모든 속성이 기본키에 완전 함수 종속이 되도록 분해하는 과정
- 부분 함수 종속을 제거
- 제 3정규형 : 릴레이션을 구성하는 속성 간에 이행적 함수 종속 관계를 분해하여 비이행적 함수 종속이 되도록 하는 과정
- BCNF(Boyce-Codd Normal Form) 정규형
- 릴레이션에서 모든 결정자가 후보키가 되도록 하는 과정
- 제 4정규형 : 다치 종속 관계가 성립되는 경우 분해하는 정규형
- 제 5정규형 : 조인 종속이 후보키를 통해서만 성립이 되도록 하는 정규형
- 조인 종속은 원래의 릴레이션을 분해한 뒤 자연 조인한 결과가 원래의 릴레이션과 같은 결과가 나오는 종속성
역정규화
- 정규화된 릴레이션을 물리적 데이터 모델링 과정에서 성능 향상을 위해 중복을 허용하더라도 통합, 분할하여 구조를 재조정
- 릴레이션 역정규화 : 두 릴레이션을 합하거나 하나의 릴레이션을 분할하는 방법
- 릴레이션 병합 : 두 릴레이션 간의 잦은 데이터 참조로 성능 저하 문제점 해결을 위해 두 릴레이션을 합하는 방법
- 릴레이션 분할
- 릴레이션을 검색할 때는 스캔(Scan)방법으로 검색하게 되는데, 속성의 수가 많거나 튜플의 수가 많은 릴레이션의 경우 자주 사용되지 않는 속성이나 튜플이 있을 수 있음
- 자주 사용되는 속성, 튜플과 자주 사용되지 않는 속성, 튜플을 분해하면 성능을 향상시킬 수 있음
- 수직 분할 : 자주 사용되는 속성과 그렇지 않는 속성을 구분해서 분할하는 방법
- 수평 분할 : 자주 사용되는 튜플과 그렇지 않는 튜플을 구분해서 분할하는 방법
- 속성 역정규화 : 릴레이션에서 성능을 향상시키기 위해 속성 단위로 추가하거나 필요한 속성을 만드는 것
- 속성 추가 : 두 릴레이션 A, B에서 A의 외래키에 의해 B의 특정 속성값을 자주 참조하는 경우
- B의 속성을 A릴레이션에 추가하는 방법
- 파생속성 추가 : 릴레이션에 파생속성을 추가하여 성능을 향상시키는 방법
- 파생속성(Delivered Attribute) : 현재 릴레이션에 없는 속성이지만 작업의 효율을 위해 한 속성으로 부터 계산이나 기타 가공에 의해 파생되는 속성
- 속성 추가 : 두 릴레이션 A, B에서 A의 외래키에 의해 B의 특정 속성값을 자주 참조하는 경우