1장 데이터베이스 기본 개념
1.1 데이터베이스
(1) 데이터베이스 개념
- 데이터: 관찰의 결과로 나타난 정량적 혼은 정성적인 실제 값
- 정보: 데이터에 의미를 부여한 것
- 데이터베이스: 조직에 필요한 정보를 얻기 위해 논리적으로 연관된 데이터를 모아 구조적으로 통합해 놓은 것
- 목적: 운영 데이터를 통합하여 저장하며 공용으로 사용
- 통합된 데이터(Integrated data): 데이터의 중복을 최소화하여 중복으로 인한 데이터 불일치 현상을 제거
- 저장된 데이터(Stored data): 디스트와 같은 컴퓨터 저장 장치에 저장된 데이터
- 운영 데이터(Operational data): 조직의 목적을 위해 사용
- 공용 데이터(Shared data): 공동으로 사용
- 데이터베이스의 특징
- 실시간 접근성(Real Time Accessibilty): 사용자의 데이터 요구에 실시간으로 서비스 제공
- 계속적인 변화(Continuous Change): 데이터의 계속적인 삽입, 삭제, 수정을 통해 현재의 정확한 데이터를 유지
- 동시 공유(Concurrent Sharing): 서로 다른 업무 또는 여러 사용자에게 동시에 공유, 서로 다른 데이터의 동시 사용 뿐만 아니라 같은 데이터의 동시 사용도 지원
- 내용에 따른 참조(Reference by Contens): 데이터의 물리적인 위치가 아니라 데이터 값에 따라 참조
(2) 데이터베이스 시스템의 구성
- 데이터베이스 시스템: 데이터베이스에 데이터를 저장하고, 이를 관리하여 조직에 필요한 정보를 생성해주는 시스템
- 데이터베이스 시스템 구성
- 데이터베이스
- 데이터베이스 관리 시스템
- 데이터 모델: 데이터 저장 기법
- 사용자
- 데이터 언어: SQL
1.2 DBMS
(1) DBMS의 등장 배경
- 파일 시스템(File System): 데이터를 파일로 관리하기 위해 파일을 생성, 삭제, 수정, 검색하는 기능을 제공하는 소프트웨어. 응용 프로그램마다 필요한 데이터를 별도의 파일로 관리함
- 파일 시스템의 문제점:
- ①응용 프로그램이 데이터 파일에 종속적
→ 데이터 종속성: 사용하는 파일의 구조를 변경하면 응용 프로그램도 함께 변경해야함. 데이터 파일에 대한 동시 공유, 보안, 회복 기능이 부족함 - ② 같은 내용의 데이터가 여러 파일에 중복 저장됨
→ 데이터 중복성: 저장 공간의 낭비 및 데이터 일관성과 데이터 무결성을 유지하기 어려움
- ①응용 프로그램이 데이터 파일에 종속적
(2) DBMS
- 데이터베이스 관리 시스템(Database Management System): 파일 시스템의 문제를 해결하기 위해 제시된 소프트웨어. 조직에 필요한 데이터를 데이터베이스에 통합하여 저장하고 관리함
- DBMS의 주요 기능
데이터 정의 (Definition) |
데이터의 구조를 정의하고 데이터 구조에 대한 삭제 및 변경 기능을 수행함 |
데이터 조작 (Mainipulation) |
데이터를 조작하는 소프트웨어(응용 프로그램)가 요청하는 데이터의 삽입, 수정, 삭제 작업을 지원함 |
데이터 제어 (Control) |
데이터베이스 사용자를 생성하고 모니터링하며 접근을 제어함. 백업과 회복, 동시성 제어 등의 기능을 지원함 |
- DBMS의 장단점
장점 | 단점 |
데이터 중복 통제 | 운영비 증가 |
데이터 독립성 확보 | 데이터 처리의 복잡성 증가 |
데이터를 동시에 공유 | 백업과 복구 작업이 어려움 |
데이터 무결성 유지 | |
데이터 보안 향상 | |
표준화 가능 | |
장애 발생시 회복 가능 | |
응용 프로그램 개발 비용 감소 |
- 파일 시스템 vs DBMS
구분 | 파일 시스템 | DBMS |
데이터 중복 | 데이터를 파일 단위로 저장하므로 중복 발생 | DBMS를 이용하여 데이터를 공유하기 때문에 중복 가능성 낮음 |
데이터 일관성 | 데이터의 중복 저장으로 일관성 결여 | 중복 제거로 데이터의 일관성이 유지됨 |
데이터 독립성 | 데이터와 프로그램이 상호의존적 | 데이터와 프로그램의 독립성 유지 가능 |
관리 기능 | 보통 | 데이터 복구, 보안, 동시성 제어, 데이터 관리 기능 들을 수행 |
프로그램 개발 생산성 | 나쁨 | 단시간에 큰 프로그램 개발 가능 |
기타 장점 | 보통 | 데이터 무결성 유지, 데이터 표준 준수 용이 |
2장 데이터베이스 시스템
2.1 데이터베이스의 구조
(1) 데이터베이스 시스템의 구성
- 데이터베이스 시스템 = DBMS + 데이터베이스
(2) 데이터베이스의 구조
- 스키마(Schema): 데이터베이스에 저장되는 데이터 구조와 제약 조건을 정의한 것
- 인스턴스(Instance): 스키마에 따라 데이터베이스에 실제로 저장된 값
- 3단계 데이터베이스 구조: 데이터베이스를 쉽게 이해하고 이용할 수 있도록 하나의 데이터베이스를 관점에 따라 세 단계로 나눈 것
- 각 단계별로 다른 추상화(Abstraction) 제공: 내부 단계에서 외부 단계로 갈수록 추상화 레벨이 높아짐
- 3단계 데이터베이스 구조 ① 외부 단계(External Level): 데이터베이스를 개별 사용자 관점에서 이해하고 표현하는 단계. 데이터베이스 하나에 외부 스키마가 여러 개 존재할 수 있음
- 외부 스키마(External Schema, 서브 스키마): 외부 단계에서 사용자에게 필요한 데이터베이스를 정의한 것. 각 사용자가 생각하는 데이터베이스의 모습으로 사용자마다 다름
- 3단계 데이터베이스 구조② 개념 단계(Conceptual Level): 데이터베이스를 조직 전체의 관점에서 이해하고 표현하는 단계. 데이터베이스 하나에 개념 스키마가 하나만 존재함
- 개념 스키마(Conceptual Schema): 개념 단계에서 데이터베이스 전체의 논리적 구조를 정의. 조직 전체의 관점에서 생각하는 데이터베이스의 모습. 전체 데이터베이스에 어떤 데이터가 저장되는지, 데이터들 간에는 어떤 관계가 존재하고 어떤 제약 조건이 존재하는지에 대한 정의뿐만 아니라, 데이터에 대한 보안 정책이나 접근 권한에 대한 정의도 포함
- 3단계 데이터베이스 구조③ 내부 단계(Internal Level): 데이터베이스를 저장 장치의 관점에서 이해하고 표현하는 단계. 데이터베이스 하나에 내부 스키마가 하나만 존재함
- 내부 스키마(Internal Schema): 전체 데이터베이스가 저장 장치에 실제로 저장되는 방법을 정의한 것. 레코드 구조, 필드 크기, 레코드 접근 경로 등의 물리적 저장 구조를 정의함
- 데이터 사전(Data Dictionary, 시스템 카탈로그): 데이터베이스에 저장되는 데이터에 관한 정보, 즉 메타 데이터를 유지하는 시스템 데이터베이스. 스키마, 사상 정보, 다양한 제약 조건 등을 저장함. 데이터베이스 관리 시스템이 스스로 생성하고 유지함
- 데이터 디렉터리(Data Directory): 데이터 사전에 있는 데이터에 실제로 접근하는데 필요한 위치 정보를 저장하는 시스템 데이터베이스. 일반 사용자의 접근은 허용되지 않음
(3) 데이터베이스 관리 시스템(DBMS)의 구성
- DBMS: 사용자와 데이터베이스를 연결시켜주는 소프트웨어. 데이터베이스 관리와 사용자의 데이터 처리 요구를 수행함.
- DBMS의 주요 구성 요소
- 질의 처리기(Query Processor): 사용자의 데이터 처리 요구를 해석하여 처리함. DDL 컴파일러, DML 프리 컴파일러, DML 컴파일러, 런타임 데이터베이스 처리기, 트랜잭션 관리자 등을 포함함.
- 저장 데이터 관리자(Stored Data Manager): 디스크에 저장된 사용자 데이터베이스와 데이터 사전을 관리
(4) 데이터베이스 언어와 사용자
- 데이터베이스 언어(SQL): 사용자와 데이터베이스 관리 시스템 간의 통신 수단. DDL, DML, DCL로 구성됨
- 데이터 정의어(DDL, Data Definition Language)
- 데이터베이스를 정의하거나, 그 정의를 수정할 목적으로 사용하는 언어
- 데이터베이스의 구조를 정의함
- 데이터 사전 또는 시스템 카탈로그를 생성함
- 데이터 조작어(Data Manipulation Language)
- 데이터의 검색, 삽입, 삭제, 변경 등 원하는 처리를 지정하는 언어
- 데이터 제어어(Data Control Language)
- 데이터를 정확하게 사용하기 위한 규정이나 규칙을 정의하는 언어
- 주로 데이터베이스 관리자(DBA)가 이용함
- 데이터 보안, 정확서을 유지하기 위한 무결성 규칙, 장애에 대비한 데이터 복구 방법, 동시 접근을 위한 병행 제어 등을 정의함
- 데이터베이스 사용자: 데이터베이스를 이용하기 위해 접근하는 모든 사람. 이용 목적에 따라 구분할 수 있음
- 데이터베이스 관리자: 데이터베이스 시스템 운영 및 관리
- 응용 프로그래머: 데이터 언어를 삽입하여 응용 프로그램을 작성함
- 최종 사용자(일반 사용자): 데이터베이스에 접근하여 데이터를 조작함
3장 관계 데이터 모델
3.1 데이터 모델
(1) 관계 데이터 모델
- 데이터 모델: 물리적 혹은 추상적으로 존재하는 현실 세계를 단순하고 정형화된 형태로 표현하는 하나의 방식 또는 규범. 실제 데이터가 갖는 특성은 살리면서, 목적에 맞게 필요한 정보만을 단순화해 표현하는 방식
→ 데이터에 대한 조작이 가능해야함 - 관계 데이터 모델: 데이터를 2차원 테이블 형태로 정의하고 설명한 모델. 실세계의 데이터를 누구나 직관적으로 이해할 수 있는 형태로 기술할 수 있는 간단한 방식을 제공.
→ 테이블을 릴레이션(Relation)이라고 함 - 관계(Relationship)
- 릴레이션의 안에서 생성되는 관계: 릴레이션 안의 데이터끼리의 관계
- 릴레이션과 릴레이션 사이에서 생성되는 관계: 릴레이션끼리의 관계
(2) 릴레이션 스키마와 인스턴스
- 릴레이션의 구성
- 스키마: 속성들을 통 틀어서 말하는 것
- 스키마의 요소
- 속성(Attribute): 릴레이션 스키마의 열
- 도메인(Domain): 속성이 가질 수 있는 값의 집합. 원자값(Atomic value, 더이상 쪼개지지 않는 값)이어야함
- 차수(Degree): 속성의 개수
- 스키마의 표현: 릴레이션_이름(속성_1, 속성_2, ...)
- null: 특정 필드에 대한 값을 알지 못하거나 아직 정해지지 않아 입력하지 못한 경우의 필드의 값. 0이나 공백 문자와는 다른 것임
- 인스턴스: 스키마에 데이터를 레코드로 저장한 형태. 스키마는 한 번 정의하면 거의 변함이 없지만 인스턴스는 수시로 바뀔 수 있음
- 인스턴스의 요소
- 튜플(Tuple): 릴레이션의 행
→ 튜플이 가지는 속성의 개수는 릴레이션 스키마의 차수와 동일하고, 릴레이션 내의 모든 튜플들은 서로 중복되지 않아야 함 - 카디널리티(Cardinality): 튜플의 수
- 튜플(Tuple): 릴레이션의 행
릴레이션 용어 | 같은 의미를 가진 용어 | 파일 시스템 용어 |
릴레이션(relation) | 테이블(table) | 파일(file) |
스키마(schema) | 내포(intension) | 헤더(header) |
인스턴스(instance) | 외연(extension) | 데이터(data) |
튜플(tuple) | 행(row) | 레코드(record) |
속성(attribute) | 열(column) | 필드(field) |
- 릴레이션의 특징
- 속성은 단일 값(원자값)을 가짐
- 한 속성의 값은 모두 같은 도메인 값을 가짐
- 속성의 순서는 의미 없음. 튜플의 순서는 의미 없음
- 릴레이션 내에서 중복된 튜플은 허용하지 않음
3.2 키
(1) 키(Key)
- 키의 필요성: 튜플 간의 순서가 의미가 없으므로 튜플을 구분하기 위해서는 각 튜플의 값을 이용함. 관계형 데이터 모델에서 특정 튜플을 구별하거나 탐색하기 위한 유일한 방법. 또한 릴레이션끼리 관계를 맺는 데도 사용됨
- 키: 속성들의 일부로 각 튜플을 식별해낼 수 있는 식별자(identifier)로서 이용됨. 일반적으로 하나의 속성을 지정하여 키로 지정하나, 여러 개의 속성들로 키를 구성할 수도 있음 → 복합키(Composite Key)
(2) 키의 종류
- 슈퍼키(Super Key): 튜플을 유일하게 식별할 수 있는 하나의 속성 혹은 속성들의 집합
- 후보키(Candidate Key): 튜플을 유일하게 식별할 수 있는 속성의 최소 집합
- 기본키(Primary Key): 여러 후보키 중 하나를 선정해 대표로 삼는 키. 후보키가 하나뿐이라면 그 후보키를 기본키로 사용하면 되고 여러 개라면 릴레이션의 특성을 반영해 하나를 선택해 사용함
- 기본키 선정 시 고려사항: 릴레이션 내 튜플을 식별할 수 있는 고유한 값을 가져야함. NULL 값 허용되지 않음. 키 값의 변동이 일어나지 않아야함. 최대한 적은 수의 속성을 가진 것이라야함. 나중에 키를 사용하는데 있어서 문제가 발생할 여지가 없어야함
- 기본키의 표현 방법: 속성에 밑줄을 그어서 표현함
→ 릴레이션_이름(속성_1, 속성_2, ...)
- 대체키(Alternate Key): 기본키로 선정되지 않은 후보키
- 외래키(Foreign Key): 다른 릴레이션의 기본키를 참조하는 속성
- 외래키의 특징: 관계 데이터 모델의 릴레이션끼리의 상호 관계를 표현할 때 사용함. 다른 릴레이션의 기본키를 참조하는 속성. 참고하고(외래키) 참조되는(기본키) 양쪽 릴레이션의 도메인은 서로 같아야함. 참조되는 값이 변경되면 참조하는 값도 변경됨. null 값과 중복 값 등이 허용됨. 자기 자신의 기본키를 참조하는 외래키도 가능함. 외래키가 기본키의 일부가 될 수 있음. 자기 자신의 기본키를 참조할 수도 있음
- 기본키는 null이 될 수 없음: 기본키는 식별자의 기능을 하는데 null이면 식별 기능이 없어짐
- 그림으로 나타낸 키
3.3 제약조건
(1) 데이터 무결성(Integrity)
- 데이터 무결성: 데이터의 일관성과 정확성을 지키는 것
구분 | 키 | |
개체 무결성 제약조건 | 참조 무결성 제약조건 | |
제약 대상 | 튜플 | 속성과 튜플 |
같은 용어 | 기본키 제약 (Primary Key Constraint) |
외래키 제약 (Foreign Key Constraint) |
해당되는 키 | 기본키 | 외래키 |
NULL 값 허용 여부 | 불가 | 허용 |
릴레이션 내 제약조건의 개수 |
1개 | 0 ~ n개 |
기타 | 튜플 삽입/수정시 제약사항 우선 확인 | 튜플 삽입/수정시 제약사항 우선 확인 부모 릴레이션의 튜플 수정/삭제시 제약사항 우선 확인 |
(2) 개체 무결성 제약조건
- 삽입: 기본키 값이 같으면 삽입이 금지됨
- 수정: 기본키 값이 같거나 null로도 수정이 금지됨
- 삭제: 특별한 확인이 필요하지 않으며 즉시 수행함
(3) 참조 무결성 제약조건
- 삽입: 참조받는 테이블에 외래키 값이 없으면 삽입 불가
- 삭제: 부모 릴레이션에서 튜플을 삭제할 경우 참조 무결성 조건을 수행하기 위한 고려사항
- 즉시 작업을 중지
- 자식 릴레이션의 관련 튜플을 삭제
- 초기에 설정된 다른 어떤 값으로 변경
- null 값으로 설정
- 삭제 추가 작업
명령어 | 의미 |
RESTRICTED | 자식 릴레이션에서 참조하고 있을 경우 부모 릴레이션의 삭제 작업을 거부함 |
CASCADE | 자식 릴레이션의 관련 튜플을 같이 삭제 처리 |
DEFAULT | 자식 릴레이션의 관련 튜플을 미리 설정해둔 값으로 변경함 |
NULL | 자식 릴레이션의 관련 튜플을 null 값으로 설정함(null 값을 허가한 경우) |
- 수정: 삭제와 삽입 명령이 연속해서 수행됨. 부모 릴레이션의 수정이 일어날 경우 삭제 옵션에 따라 처리된 후 문제가 없으면 다시 삽입 제약조건에 따라 처리됨
3.4 관계대수
(1) 관계대수(Relational Algebra)
- 관계대수: 릴레이션에서 원하는 결과를 얻기 위해 수학의 대수와 같은 연산을 이용해 질의하는 방법을 기술하는 언어
- 관계대수와 관계해석
- 관계대수: 어떤 데이터를 어떻게 찾는지에 대한 처리 절차를 명시하는 절차적 언어이며, DBMS 내부의 처리 언어로 사용됨
- 관계해석: 어떤 데이터를 찾는지만 명시하는 선언적인 언어로 관계대수와 함께 관계 DBMS의 표준 언어인 SQL의 이론적인 기반을 제공함. 비절차적 언어임
(2) 관계대수 연산자
연산자 종류 | 대상 | 연산자 이름 | 기호 | 설명 |
기본 | 단항 | 셀렉션(선택) | σ | 릴레이션에서 조건에 만족하는 튜플을 선택 |
기본 | 단항 | 프로젝션(추출) | π | 릴레이션의 속성을 선택 |
추가 | 단항 | 개명(재명명) | ρ | 릴레이션이나 속성의 이름을 변경 |
유도 | 이항 | 디비전(나누기) | ÷ | 부모 릴레이션에 포함된 튜플의 값을 모두 갖고 있는 튜플을 분자 릴레이션에서 추출 |
기본 | 이항 | 합집합 | ∪ | 두 릴레이션의 합집합 |
기본 | 이항 | 차집합 | - | 두 릴레이션의 차집합 |
유도 | 이항 | 교집합 | ∩ | 두 릴레이션의 교집합 |
기본 | 이항 | 카디전 프로덕트 | × | 두 릴레이션에 속한 모든 튜플의 집합 |
유도 | 이형 | 세타 | ⋈ | 두 릴레이션 간의 비교 조건에 만족하는 집합 |
동등 | ⋈ | 두 릴레이션 간의 같은 값을 가진 집합 | ||
자연 | ⋈N | 동등 조인에서 중복 속성을 제거 | ||
세미 left | ⋉ | 자연 조인 후 오른쪽 속성을 제거 | ||
세미 right | ⋊ | 자연 조인 후 왼쪽 속성을 제거 | ||
외부 left | ⟕ | 자연 조인 후 각각 왼쪽, 오른쪽, 양쪽의 모든 값을 결과로 추출 조인이 실패(또는 값이 없을 경우)한 쪽의 값을 null로 채움 |
||
외부 right | ⟖ | |||
외부 full | ⟗ |
(3) 관계대수식
- 관계대수식: 관계대수는 릴레이션끼리의 연산을 통해 결과 릴레이션을 찾는 절차. 수학에서의 수식 구조와 유사. 관계대수식은 릴레이션과 연산자로 구성되며, 결과는 릴레이션으로 반환
- 단한 연산자: 연산자<조건>릴레이션
- 이항 연산자: 릴레이션1 연산자<조건>릴레이션2
- 셀렉션(Selection): 릴레이션의 튜플을 추출하기 위한 연산. 하나의 릴레이션을 대상으로 하는 단항 연산자이며, 찾고자 하는 튜플의 조건을 명시하고, 그 조건에 만족하는 튜플을 반환함
- 형식: σ<조건>(릴레이션)
- 비교 연산자(>, <, <=, >=, <>)와 부울 연산자(∧, ∨, ¬)의 조합
- 셀렉션의 확장
- 형식: σ<복합조건> (릴레이션)
- 복합조건을 나타내는 기호: ∧(AND), ∨(OR), ¬(NOT)
- 프로젝션(Projection): 릴레이션의 속성을 추출하기 위한 연산으로 단항 연산자임
- 형식: π<속성리스트> (릴레이션)
- 중복을 제거해야 함
- 개명 연산(재명명 연산): 테이블에 이름을 부여하거나 변경하는 연산
- 형식 1 : ρ<릴레이션1> (릴레이션2)
→ 릴레이션2의 이름을 릴레이션1으로 변경하라는 의미 - 형식 2: ρ<릴레이션1>(속성리스트)(릴레이션2)
→ 릴레이션2의 이름을 릴레이션1으로 변경하는 동시에 릴레이션2에 정의된 속성명들을 모두 속성리스트로 변경 - 주의: 재명명 연산은 중간 결과나 최종 결과에 대한 릴레이션명이 변경됨. 본래 데이터베이스에 저자오딘 릴레이션의 이름까지 변경되는 것은 아님
- 형식 1 : ρ<릴레이션1> (릴레이션2)
(3) 집합 연산
- 수학적 집합 이론에서 정의된 연산: 합집합, 차집합, 카티션 프로덕트, 교집합 → 차집합으로 정의할 수 있음
- 호환 가능한 릴레이션들(Compatible Relations): 합집합, 차집합, 교집합 연산에서 두 피연산의 차수와 속성 이름들이 동일해야함. 같은 이름의 속성들이라 하더라도 도메인이 일치해야함
- 합집합: 두 개의 릴레이션을 합하여 하나의 릴레이션을 반환함. 이때 두 개의 릴레이션은 서로 같은 속성 순서와 도메인을 가져야함
- 형식: R ∪ S
- 교집합: 합병 가능한 두 릴레이션을 대상으로 하며, 두 릴레이션이 공통으로 가지고 있는 튜플을 반환함
- 형식: R ∩ S
- 차집합: 첫 번째 릴레이션에는 속하고 두 번째 릴레이션에는 속하지 않는 튜플을 반환함
- 형식: R - S
- 카티전 프로덕트: 두 릴레이션을 연결시켜 하나로 합칠 때 사용함. 결과 릴레이션은 첫 번째 릴레이션의 오른쪽에 두 번째 릴레이션의 모든 튜플을 순서대로 배열해 반환함. 결과 릴레이션의 차수는 두 릴레이션의 차수의 합. 카디날리티는 두 릴레이션의 카디날리티의 곱임.
- 형식: R × S
(4) 조인(Join)
- 조인: 두 릴레이션의 공통 속성을 기준으로 속성 값이 같은 튜플을 수평을 결합하는 연산. 조인을 수행하기 위해서는 두 릴레이션의 조인에 참여하는 속성이 서로 동일한 도메인으로 구성되어야함. 조인 연산의 결과는 공통 속성의 속성 값이 동일한 튜플만을 반환함
- 형식: 릴레이션1 ▷◁(조건) 릴레이션2 = σ(조건) (릴레이션1×릴레이션2)
- 조인 연산의 구분
- 기본 연산: 세타 조인, 동등 조인, 자연 조인
- 확장된 조인 연산: 세미 조인, 외부 조인
'기초' 카테고리의 다른 글
[SQL] 3 - 서브쿼리, 내장 함수, CASE 함수 (0) | 2020.05.30 |
---|---|
[SQL] 2 - SQL 기초 (0) | 2020.05.28 |
[JAVA] 13 - 네트워크 기초 (0) | 2020.05.21 |
[JAVA] 12 - 쓰레드 동기화 (0) | 2020.05.21 |
[JAVA] 11 - 쓰레드, 멀티태스킹 (0) | 2020.05.20 |