관계형 데이터베이스의 구조
관계형 데이터베이스의 Relation 구조
릴레이션은 데이터들을 표(Table)형태로 표현한 것으로 구조를 나타내는 릴레이션 스키마와 실제 값들인 릴레이션 인스턴스로 구성
** 릴레이션 인스턴스 : 데이터 개체를 구성하고 있는 속성들에 데이터 타입이 정의되어 구체적인 데이터 값을 갖고 있는 것
튜플(Tuple)
- 릴레이션을 구성하는 각각의 행
- 속성의 모임
- 파일 구조의 레코드와 같은 구조
- 튜플의 수 = 카디널리티 = 기수 = 대응수
속성(Attribute)
- 데이터베이스를 구성하는 가장 작은 논리적 단위
- 파일 구조상의 데이터 항목 또는 데이터 필드
- 개체의 특성
- 속성의 수 = 디그리 = 치수
도메인(Domain)
- 속성 하나가 취할 수 있는 같은 타입의 원자값들의 집합
- 값의 합법 여부를 시스템이 검사하는데도 이용
ex) 성별의 도메인은 남, 여로 그 이외의 값을 입력될 수 없다.
릴레이션의 특징
- 한 릴레이션에는 똑같은 튜플이 포함될 수 없으므로 튜플들은 모두 상이하다.
- 한 릴레이션에 포함된 튜플 사이에는 순서가 없다.
- 시간에 따라 변한다. -> 튜플의 삽입, 삭제
- 스키마의 속성 순서는 중요하지 않다.
- 속성의 명칭은 유일해야 하지만, 속성을 구성하는 값은 동일할 수 있다.
- 튜플을 유일하게 식별하기 위해 속성들의 부분집합을 키로 설정
- 속성의 값은 논리적으로 더 이상 쪼갤 수 없는 원자값만 저장
관계형 데이터베이스의 제약 조건
키(Key)의 개념 및 종류
키는 데이터베이스에서 조건에 만족하는 튜플을 찾거나 순서대로 정렬할 때 튜플들을 서로 구분할 수 있는 기준이 되는 속성을 말한다.
후보키(Candidate Key)
- 릴레이션을 구성하는 속성들 중에서 튜플을 유일하게 식별하는 기본키로 사용할 수 있는 속성
- 중복된 튜플들이 있을 수 없으므로 모든 릴레이션에는 반드시 하나 이상의 후보키가 존재
- 유일성 : 하나의 키 값으로 하나의 튜플만을 유일하게 식별
- 최소성 : 모든 레코드들을 유일하게 식별하는 데 꼭 필요한 속성으로만 구성
ex) <학생> 릴레이션 -> 학번, 주민번호
기본키(Primary Key)
- 후보키 중에서 선택한 주키
- 특정 튜플을 유일하게 구별할 수 있는 속성
- Null 값을 가질 수 없다.
- 중복값을 가질 수 없다.
대체키(Altermate Key)
- 후보키가 둘 이상일 때 기본키를 제외한 나머지 후보키
- 보조키라고도 한다.
외래키(Foreign Key)
- 참조되는 릴레이션의 기본키와 대응되어 릴레이션 간에 참조 관계를 표현하는데 중요한 도구
- 외래키로 지정되면 참조 릴레이션의 기본키에 없는 값은 입력할 수 없다.
무결성
1) 개체 무결성
- 릴레이션에서 기본키를 구성하는 속성은 널 값이나 중복값을 가질 수 없다.
2) 참조 무결성
- 외래키 값은 널이거나 참조 릴레이션의 기본키 값과 동일해야 한다. 즉 릴레이션은 참조할 수 없는 외래키 값을 가질 수 없다.
- 외래키와 참조하려는 테이블의 기본키는 도메인과 속성 개수가 같아야 한다.
관계대수 및 관계해석
관계대수의 개요
- 관계형 데이터베이스에서 원하는 정보와 그 정보를 검색하기 위해서 어떻게 유도하는가를 기술하는 절차적인 언어
- 피연산자가 릴레이션이고 결과도 릴레이션
- 순수 관계 연산자 : Select, Project, Join, Division
- 일반 집합 연산자 : 합집합, 교집합, 차집합, 교차곱
순수 관계 연산자
- 관계 데이터베이스에 적용할 수 있도록 특별히 개발한 관계 연산자
1) Select
- 릴레이션에 존재하는 튜플 중에서 선택 조건을 만족하는 튜플의 부분집합을 구하여 새로운 릴레이션을 만든다.
- 수평연산
- 표기형식 : σ<조건>(릴레이션)
ex) 성적평균이 90점 이상인 사람을 성적 릴레이션에서 추출
2) Project
- 주어진 릴레이션에서 속성 list에 제시된 속성만 추출
- 수직연산
- 표기형식 : π<속성리스트>(릴레이션)
ex) 성적 릴레이션에서 이름, 평균 리스트를 추출
3) Join
- 공통 속성을 중심으로 두 개의 릴레이션을 하나로 합쳐서 새로운 릴레이션을 만드는 연산자
- 표기형식 : 릴레이션⋈키속성r=키속성s 릴레이션
ex) 성적과 학적부 릴레이션을 학생no 속성을 기준으로 합쳐라
4) Division
- X ⊃ Y인 두개의 릴레이션이 있을 때 R의 속성이 S의 속성값을 모든 가진 튜플에서 S가 가진 속성을 제외한 속성만을 구하는 연산
- 표기형식 : R [속성r ÷ 속성s] S
일반 집합 연산자
- 합집합, 교집합, 차집합은 합병 조건이 가능해야 한다.
- 합병조건 : 합병하려는 두 릴레이션 간에 속성 수가 같고, 각 속성이 취할 수 있는 도메인의 범위가 같아야 한다.
관계해석
- 관계 데이터의 연산을 표현하는 방법으로 원하는 정보를 정의할 때는 계산 수식을 사용한다.
- 원하는 정보가 무엇이라는 것만 정의하는 비절차적 특성
- 튜플 관계해석, 도메인 관계해석
- 관계해석과 관계대수는 관계 데이터베이스를 처리하는 기능과 능력 면에서 동등
- 관계대수로 표현한 식은 관계해석으로 표현할 수 있다.
- 질의어로 표현
정규화
정규화의 개요
- 잘못 설계된 관계형 스키마를 더 작은 속성의 세트로 쪼개어 바람직한 스키마로 만들어 가는 과정
- 논리적 설계 단계에서 수행
정규화의 목적
- 데이터 구조의 안정성
- 효과적인 검색 알고리즘
- 중복 배제
Anomaly(이상)의 개념 및 종류
∗ 원인 : 정규화(Normalization)를 거치지 않으면 데이터베이스 내에 데이터들이 불필요하게 중복되어 릴레이션 조작 시 예기치 못한 곤란한 현상이 발생
1) 삽입 이상 : 릴레이션에 데이터를 삽입할 때 의도와는 상관없이 원하지 않은 값들도 함께 삽입되는 현상
2) 삭제 이상 : 릴레이션에서 한 튜플을 삭제할 때 의도와는 상관없는 값들도 함께 삭제되는 연쇄 삭제 현상이 일어나는 현상
3) 갱신 이상 : 릴레이션에서 튜플에 있는 속성값을 갱신할 때 일부 튜플의 정보만 갱신되어 정보에 모순이 생기는 현상
∗ 불필요하게 중복되어 저장되면 릴레이셔 조작 시 예기치 못한 이상 현상이 발생할 가능성이 높아진다. -> 정규화는 이상을 제거하기 위해서 중복성 및 종속성을 배제시키는 방법으로 사용
정규화의 원칙
- 정보의 무손실
- 분리의 원칙
- 데이터의 중복성 감소
정규화 과정
1) 1NF(제1정규형)
- 릴레이션에 속한 모든 도메인이 원자값만으로 되어 있는 릴레이션
- 모든 속성이 단순 영역에서 정의
2) 2NF(제2정규형)
- 릴레이션이 R이 1NF이고, 키가 아닌 모든 속성이 기본키에 대하여 완전 함수적 종속 관계를 만족
∗ 함수적 종속 관계 / 완전 함수적 종속 관계
- 함수적 종속 관계
학번에 따라 읾이 결정될 때 이름을 학번에 함수 종속적이라고 하며 '학번 -> 이름'과 같이 쓴다.
- 완전 함수적 종속 관계
수강(학번, 과목명, 성적) 일 때 성적은 (학번, 과목명)에는 함수 종속이지만, 학번이나 과목명에는 함수 종속이 아니다.
3) 3NF(제3정규형)
- 릴레이션 R이 2NF이고, 키가 아닌 모든 속성이 기본키에 대해 이행적 종속 관계를 이루지 않도록 제한한 관계형
ex) A -> B이고, B -> C일 때 A -> C를 만족하는 관계
- 무손실 조인 또는 종속성 보존을 저해하지 않고도 항상 얻을 수 있다.
4) BCNF(Boye-Codd 정규형)
- 릴레이션 R에서 결정자가 모두 후보키인 관계형
- 3NF에서 후보키가 많고 서로 중첩되는 경우에 적용하는 강한 제3정규형이라고도 한다.
- 모든 BCNF가 종속성을 보존하는 것은 아니다.
- 제약 조건
가. 키가 아닌 모든 속성은 각 키에 대하여 완전 종속
나. 키가 아닌 모든 속성은 그 자신에 부분적으로 들어가 있지 않은 모든 키에 대하여 완전 종속
다. 어떤 속성도 키가 아닌 속성에 대해서는 완전 종속할 수 없다.
5) 4NF(제4정규형)
- 릴레이션 R에 A ->> B가 성립하는 경우 R의 모든 속성이 A에 함수적 종속이다.
6) 5NF(제5정규형, PJ/NF)
- 릴레이션 R의 모든 조인 종속성(JD)의 만족이 R의 후보키를 통해서만 만족될 때
∗ 정규화 단계
도메인의 원자값 -> 부분적 함수 종속 제거 -> 이행적 함수 종속 제거 -> 결정자이면서 후보키가 아닌 것 제거 -> 다치 종속 제거 -> 조인 종속성 이용
SQL의 개념
SQL(Structured Query Language)의 개요
- 관계대수와 관계해석을 기초로 한 혼합 데이터 언어
- 질의어지만 질 의 기능만 있는 것이 아니라 데이터 구조의 정의, 데이터 조작, 데이터 제어 기능을 모두 갖추고 있다.(비절차어의 일종)
SQL의 분류
1) DDL(데이터 정의어)
- 스키마, 도메인, 테이블, 뷰, 인덱스를 정의하거나 변경 또는 삭제
- 논리적 데이터 구조와 물리적 데이터 구조의 사상을 정의
- 데이터베이스 관리자나 설계자가 사용
- 데이터 정의어의 세 가지 유형
명령어 | 기능 |
---|
CREATE | 스키마, 도메인, 테이블, 뷰, 인덱스를 정의한다. |
ALTER | 테이블에 대한 정의를 변경하는 데 사용한다. |
DROP | 스키마, 도메인, 테이블, 뷰, 인덱스를 삭제한다. |
2) DML(데이터 조직어)
- 데이터베이스 사용자가 응용 프로그램이나 질의어를 통하여 저장된 데이터를 실질적으로 처리하는 데 사용되는 언어
- 사용자와 관리 시스템 간의 인터페이스를 제공
- 데이터 조작어(DML)의 네 가지 유형
명령어 | 기능 |
---|
SELECT | 테이블에서 조건에 맞는 튜플을 검색한다. |
INSERT | 테이블에 새로운 튜플을 삽입한다. |
DELETE | 테이블에서 조건에 맞는 튜플을 삭제한다. |
UPDATE | 테이블에서 조건에 맞는 튜플의 내용을 변경한다. |
3) DCL(데이터 제어어)
- 데이터의 보안, 무결성, 회복, 병행 수행 제어 등을 정의하는 데 사용되는 언어
- 관리자가 데이터 관리를 목적으로 사용
- 데이터 제어어의 종류
명령어 | 기능 |
---|
COMMIT | 명령에 의해 수행된 결과를 실제 물리적 디스크로 저장하고, 데이터베이스 조작 작업이 정상적으로 완료되었음을 관리자에게 알려준다. |
ROLLBACK | 데이터베이스 조작 작업이 비정상적으로 종료되었을 때 원래의 상태로 복구한다. |
GRANT | 데이터베이스 사용자에게 사용 권환을 부여한다. |
REVOKE | 데이터베이스 사용자의 사용 권한을 취소한다. |
DDL
DDL로 정의된 내용은 Meta-data가 되어, 시스템 카탈로그에 저장
데이터 정의문에서 사용하는 테이블 종류
종류 | 기능 |
---|
기본테이블 | 이름을 가지고 있으며 독자적으로 존재한다. |
뷰테이블 | 독자적으로 존재하지 못하고, 기본 테이블로부터 유도된 이름을 가진 가상 테이블이다. |
임시테이블 | 질의문 처리 결과로 만들어진 테이블로서, 이름을 가지지 않는다. |
CREATE
- 스키마, 도메인, 테이블, 인덱스 정의하는 명령문
참조 무결성의 CASCADE법칙
참조 무결성 제약이 설정된 기본 테이블의 어떤 데이터를 삭제하는 경우 그 데이터와 밀접하게 연관되어 있는 다른 테이블의 데이터들도 도미노처럼 자동으로 삭제된다. 이러한 법칙을 '계단식', '연속성'이라는 사전적 의미를 가진 CASCADE 법칙이라 한다.
ALTER
테이블에 대한 정의를 변경하는 명령문
DROP
스키마, 도메인, 테이블, 뷰, 인덱스 등을 삭제하는 명령문
- CASCADE 옵션 : 삭제할 요소를 참조하는 다른 모든 개체를 함께 삭제한다. 즉 테이블 데이터 삭제 시 각 외래키에 부합되는 모든 데이터를 삭제하는 참조 무결성의 법칙을 설정
- RESTRICT 옵션 : 삭제할 요소를 다른 개체가 참조중일 때는 삭제를 취소한다.
DML - SELECT
테이블을 구성하는 튜플(행)들 중에서 전체 또는 조건을 만족하는 튜플을 검색하여 주기억장치 상에 임시 테이블로 구성하는 명령문
일반형식
- 두 개 이상의 테이블을 대상으로 검색할 때는 '테이블명.속성명'으로 표현
- Predicate : 불러올 튜플 수를 제한할 명령어를 기술(ALL, DISTINCT, DISTINCTROW)
∗ 조건 연산자
- IN : 포함되어 있다.
- ∗ 또는 % : 모든 문자를 대표
- ? 또는 _ : 한 자리 문자를 대표
- # : 한자리 숫자를 대표
DML - INSERT, DELETE, UPDATE
삽입문(INSERT INTO~)
기본 테이블에 새로운 튜플을 삽입할 때 사용
- 대응하는 속성과 데이터는 개수와 data-type이 일치
- 기본 테이블의 모든 속성을 사용할 때는 속성명 생략
- SELECT문을 사용하여 다른 테이블의 검색 결과를 삽입
삭제문(DELETE FROM~)
기본 테이블에 있는 튜플들 중에서 특정 튜플(행)을 삭제할 때 사용
갱신문(UPDATE~ SET~)
기본 테이블에 있는 튜플들 중에서 특정 튜플의 내용을 변경할 때 사용
내장 SQL
내장 SQL(Embedded SQL)의 정의
응용 프로그램 내에 데이터베이스에서 사용하는 테이터를 정의하거나 질의하는 SQL 문장을 내포하여 프로그램이 실행될 때 함께 실행되도록 호스트 프로그램 언어로 만든 프로그램에 삽입된 SQL
내장 SQL의 특징
- 호스트 언어에서 실행문이 나타날 수 있는 곳이면 프로그램의 어디서나 사용
- 단 하나의 튜플만을 반환
호스트 언어의 실행문과 구분시키는 방법
1) 명령문의 구분
- C/C++에서 내장 SQL문은 $와 세미클론(;) 문자 사이에 기술
- Visual BASIC에서는 내장 SQL문 앞에 'EXEX SQL'을 기술
2) 변수의 구분
내장 SQL에서 사용하는 호스트 변수는 변수 앞에 클론(:) 문자를 붙인다.
커서(Cursor)
- 내장 SQL문의 수행 결과로 반환될 수 있는 복수의 튜플들을 액세스할 수 있도록 해주는 개념
- 질의 수행 결과로 반환되는 첫 번째 튜플에 대한 포인터로 생각할 수 있다.
- 튜플들을 한 번에 하나씩 차례로 처리할 수 있다.
커서 관련 명령어
- DECLARE : 커서를 정의하는 등 커서에 관련된 선언
- OPEN : 커서가 질의 결과의 첫 번째 튜플을 포인트 하도록 설정
- FETCH : 질의 결과의 튜플들 중 현재의 다음 튜플로 커서를 이동
- CLOSE : 질의 수행 결과에 대한 처리 종료 시 커서를 닫는다.
뷰(View)
뷰(View)의 개요
- 사용자에게 접근이 허용된 자료만을 제한적으로 보여주기 위해 하나 이상의 기본 테이블로부터 유도된, 이름을 가지는 가상 테이블
- 저장장치 내에 물리적으로 존재하지 않지만, 사용자에게는 있는 것처럼 간주
- 데이터 보정작업, 처리과정 시험 등 임시적인 작업을 위한 용도로 활용
- 조인문의 사용 최소화로 사용상의 편의성을 최대화
뷰(View)의 특징
- 기본 테이블로부터 유도된 테이블이기 때문에 기본 테이블과 같은 형태의 구조를 사용하며, 조작도 기본 테이블과 거의 같다.
- 가상 테이블이기 때문에 물리적으로 구현되어 있지 않다.
- 데이터의 논리적 독립성 제공
- 필요한 데이터만 뷰로 정의해서 처리할 수 있기 때문에 관리가 용이하고 명령문이 간단해진다.
- 뷰를 통해서만 데이터에 접근하게 하면 뷰에 나타나지 않는 데이터를 안전하게 보호하는 효율적인 기법으로 사용
- 기본키를 포함한 속성 집합으로 뷰를 구성해야만 삽입, 삭제, 갱신 연산이 가능
- 정의된 뷰는 다른 뷰의 정의에 기초가 될 수 있다.
- 정의 테이블을 삭제하면 그 테이블이나 뷰를 기초로 정의된 다른 뷰도 자동으로 삭제
뷰(View)의 장, 단점
장점
- 논리적 데이터 독립성 제공
- 동일 데이터에 대해 동시에 여러 사용자의 상이한 응용이나 요구를 지원
- 사용자의 데이터 관리를 간단하게 해준다.
- 접근 제어를 통한 자동 보안 제공
단점
- 독립적인 인덱스를 가질 수 없다.
- ALTER VIEW문을 사용할 수 없다. 즉, 뷰의 정의를 변경할 수 없다.
- 뷰로 구성된 내용에 대한 삽입, 삭제, 갱신 연산에 제약이 따른다.
뷰(View)의 정의문
- 부질의어로서의 SELECT문에는 UNION이나 ORDER BY절을 사용 할 수 없다.
- 속성 이름을 기술하지 않으면 SELECT문의 속성 이름이 자동으로 사용
뷰(View) 삭제문
- RESTRICT : 뷰를 다른 곳에서 참조하고 있으면 삭제 취소
- CASCADE : 뷰를 참조하는 다른 뷰나 제약 조건까지 모두 삭제
시스템 카탈로그
시스템 카탈로그의 의미
- 시스템 그 자체에 관련이 있는 다양한 객체에 관한 정보를 포함하는 시스템 데이터베이스
- 각 테이블은 사용자를 포함하여 DBMS에서 지원하는 모든 데이터 객체에 대한 정의나 명세에 관한 정보를 유지 관리
- 데이터베이스 구조 및 통계 정보 저장
- 카탈로그들이 생성되면 자료 사전(Data Dictionary)에 저장
- 카탈로그에 저장된 정보를 메타 데이터라고 한다.
카탈로그의 특징
- 카탈로그 자체도 시스템 테이블로 구성 - > 검색 가능
- INSERT, DELETE, UPDATE문으로 카탈로그를 갱신하는 것은 허용되지 않는다.
- 데이터베이스 시스템에 따라 상이한 구조를 갖는다.
- DBMS가 스스로 생성하고 유지
- 카탈로그의 갱신 : 사용자가 SQL문을 실행시켜 기본 테이블, 뷰, 인덱스 등에 변화를 주면 시스템이 자동으로 갱신
- 분산 시스템에서의 카탈로그 : 위치 투명성 및 중복 투명성을 제공하기 위해 필요한 모든 제어 정보를 가져야 한다.
카탈로그/데이터 사전을 참조하기 위한 DBMS 내의 모듈 시스템
- 데이터 정의어 변역기 : DDL을 메타 데이터를 갖는 테이블(카탈로그)로 변환하여 데이터 사전에 저장
- 데이터 조작어 번역기 : 응용 프로그램에 삽입된 DML문을 주 언어로 표현한 프로시저 호출로 변환하여 질의 처리기와 상호 통신
- Data Directory : 데이터 사전에 수록된 데이터를 실제로 접근하는 데 필요한 정보를 관리 유지하는 시스템으로 시스템 카탈로그는 사용자와 시스템 모두 접근할 수 있지만 데이터 디렉터리는 시스템만 접근할 수 있다.
- 질의 최적화기
- 트랜잭션 처리기 : 복수 사용자 환경에서 평행으로 동시에 일어나는 트랜잭션 문제를 해결하여, 각각의 사용자가 데이터베이스 자원을 배타적으로 이용할 수 있도록 한다.