
Ch1. 데이터베이스 개념 및 특징
DB 및 DB 관리 시스템
데이터는 객관적 사실이라는 존재적 특성을 가짐
데이터는 추론, 예측, 전망, 추정을 위한 근거로 기능하는 당위적 특성을 가지고 있음
정량적 데이터 / 정성적 데이터로 나뉨
DB
논리적으로 연관된 데이터를 모아 일정한 형태로 저장해 놓은 것
중복 데이터를 최소화해 조직의 목적에 맞게 관리한 것
ISOS
Integrated Data
Stored Data
Operational Data
Shared Data
DB 시스템 특징
R1C3
실시간 접근성(Real Time Accessibility): 실시간 응답
지속적인 변화(Continuouse Evolution): 삽입,삭제,수정을 해 항상 최신의 데이터를 동적 유지
동시 공유(Concurrent Sharing): 목적이 서로 다른 여러 사용자가 동시에 원하는 데이터 공유
내용에 의한 참조(Content Regerence): 사용자가 요구하는 데이터 내용을 참조
파일 시스템 - 중복저장의 문제
데이터를 파일로 관리해 생성, 삭제, 수정, 검색
응용 프로그램마다 필요한 데이터를 별도의 파일로 생성 및 관리
DBMS
조직에 필요한 데이터를 관리하는 시스템
주요 기능
데이터 정의: 구조를 정의하거나 수정 기능
데이터 조작: 데이터 삽입, 삭제, 수정, 검색 기능
데이터 제어: 데이터 접근 제어 및 안전하게 유지
Ch2. 데이터베이스 개론
01. 데이터베이스 유형 및 특징
1. 계층형 데이터베이스
데이터가 트리 구조로 구성
부모-자식 관계 정보 표현
부모 레코드는 여러 자식 레코드 소유, 자식은 단하나의 부모 레코드만 소유
일대일, 일대다 관계가 무너지면 변경이 어려움
데이터 중복이 발생하기 쉬움
거의 사용하지 않지만, XML 문서, 파일 시스템 등에서 사용
2. 네트워크형 데이터베이스
노드와 집합구조로 표현
노드는 네트워크 상에 있으며 대등한 관계
한 쌍의 노드에서 하나를 owner, 다른 하나는 member로 표현
종속성 문제가 발생하기 쉬움
3. 키-값 데이터베이스
레코드를 검색하기 위해 키 사용
데이터 중복이 발생하며 비정형 데이터 저장에 적합
스키마 없이 작동, 데이터 구조를 미리 정의할 필요가 없음
키-값데이터베이스가 NoSQL의 한 종류인 것
Key-value 제외에도 Document, Column, Graph 등이 있다.
4. 관계형 데이터베이스
가장 많이 사용되는 DB
데이터가 하나 이상의 열과 행의 테이블에 저장
column = field = attribute
row = tuple = record
사전 정의된 관계로 데이터를 구성
정형 데이터 처리에 유리
Entity Relationship Diagram 을 사용
논리 모델, 물리모델 존재
MySQL, Oracle, SQL Server, PostgreSQL, SQLite …
→ 결국 데이터의 특성에 따라 DB를 잘 선택하자.
02. 관계형 데이터 모델
E.F Codd 박사가 제안
수학의 집합 이론에 근거해 디자인
비절차적인 언어로 원하는 데이터를 쉽게 표현
릴레이션
행과 열로 구성된 테이블
relation: 릴레이션 테이블
relation data model: 관계 데이터 모델
realtional database: 관계 데이터베이스
relational algebra: 관계대수
realtionship: 테이블과의 관계
key
유일하게 식별한다는 의미
관계 DB에서 키는 릴레이션에서 튜플을 식별할 때 사용
키는 릴레이션을 맺는데 사용
Super key
튜플을 유일하게 식별할 수 있는 하나의 속성 또는 속성 집합
(주민번호, 이름) 처럼 포함하지 않아도되는 속성을 포함할 수 있음
키를 구성하는 속성이 많으면 관계 표현이 복잡해진다.
Candidate key
튜플을 유일하게 식별할 수 있는 속성의 최소 집합
효율성 측면에서 매우 중요
슈퍼키에서 없어도되는 속성을 포함하면 후보키가 아니다.
Primary Key
여러 후보키 중에서 하나를 선정해 대표로 삼는 키
후보키가 1개면 그 키를 사용, 여러 개라면 릴레이션 특성을 반영해 하나를 선택
기본키 제약 조건
튜플을 식별할 수 있는 고유한 값을 가져야한다.
NULL 값 허용 x
키 값의 변동이 발생하지 않는다.
Surrogate Key(대리키)
기본키가 보안을 요하거나, 여러 개의 속성으로 구성되 복잡하거나 마땅한 기본키가 없을 때 일련번호 같은 가상의 속성을 만들어 기본 키로 사용
임의로 생성하는 값으로 사용자가 직관적으로 그 값의 의미를 알 수 없다.
Alternate Key(대체키)
PK(기본키)로 선정되지 않은 후보키
Foreign Key
다른 릴레이션의 기본키를 참조하는 속성
관계 데이터 모델의 특징인 릴레이션 간의 관계를 표현
외래키가 성립하기 위해서는 참조와 참조되는 양쪽 릴레이션의 도메인이 서로 동일해야 한다.
릴레이션의 PK 값이 변경되면 참조하는 외래키 값도 변경
외래키 제약조건
다른 릴레이션이 아닌 자기 자신을 참조할 수도 있다.
무결성 제약조건
데이터 무결성은 데이터의 일관성과 정확성을 지키는 것
데이터는 결함이 없고 질의의 대해 신뢰성 있는 답을 제공해야한다.
일관성을 유지하고 중복을 제거한다.
삽입, 수정, 삭제시 여러가지 제약 조건을 따른다.
튜플에 삽입 가능한 데이터 값을 제한하는 도메인 무결성
릴레이션 내의 튜플 속성이 도메인에 지정된 값만 허용하는 조건
데이터 type, null, not null, default, check
모델의 관계표현을 위한 개체 무결성, 참조 무결성이 있다.
개체 무결성 제약조건: 기본키 제약
기본키를 지정하고 그에 따른 무결성 원칙, NULL을 가질 수 없다.
릴레이션 내에서 오직 한 개의 값만 가질 수 있다.
참조 무결성 제약조건: 외래키 제약
참조되는 키들은 도메인이 동일해야 한다.
자식 릴레이션은 부모 릴레이션의 제약을 받는다.
RESTRICTED, CASCADE, DEFAULT, NULL
03. 관계 대수
수학의 대수와 같은 연산을 이용해 질의하는 방법
절차적 언어
하나 이상의 릴레이션에 연산을 수행하여 결과 릴레이션이 나오기까지의 절차를 확인할 수 있는 방법을 제공
SQL은 관계 해석을 기반으로 하지만, DBMS 내부에서는 관계대수에 기반을 둔 연산을 수행한다.
관계 DB는 릴레이션이라는 수학적 개념에 기초한다.
집합은 숫자, 문자, 사람 등 객체의 모임이다.
카티션프로덕트의 기초집합이 각각 가질 수 있는 값의 범위를 도메인이라 한다.
집합 연산은 합집합, 교집합, 카티션프로덕트 등이 있다.
관계대수 연산자
수학에서 operator란 피연산자에 적용되는 연산 기호
관계대수 연산자는 2가지 그룹으로 나눌 수 있다.
관계 데이터 모델을 위한 순수 관계 연산(relational operations)
selection, projection, join, division, rename
수학적 집합이론에 차용된 일반 집합연산(set operations)
합집합, 교집합, 차집합, 카티션프로덕트
관계연산
selection: 릴레이션의 튜플을 추출하기 위한 연산으로 단항 연산자
조건에 맞는 튜플을 반환
<속성> = <상수값 or 속성> 형태
projection: 릴레이션의 속성을 추출하기 위한 연산으로 단항 연산자
결과 릴레이션의 차수는 대상 릴레이션의 차수보다 작거나 같고, 카디널리티는 동일
π<속성> (R), π<이름, 주소, 전화번호> (고객)
집합연산
합집합, 교집합, 차집합, 카티션 프로덕트
카티션 프로덕트(X)
차수는 두 릴레이션의 차수의 합
카디널리티는 두 릴레이션의 곱
조인
두 릴레이션의 공통 속성을 기준으로 속성 값이 같은 튜플을 수평으로 결합
두 릴레이션을 카티션 프로덕트로 연산 후 셀렉션 연산을 한 것과 동일
R ⋈c S = σc(R * S), c는 조인 조건
조인을 수행하려면 두 릴레이션의 조인에 참여하는 속성이 서로 동일한 도메인으로 구성
기본 조인 연산: 두 릴레이션 간의 속성 값 비교 (세타 조인, 동등 조인, 자연 조인)
확장된 조인 연산: 두 릴레이션을 조인한 후 한 릴레이션의 튜플만 반환 (세미 조인, 외부 조인)
division
릴레이션의 속성 값의 집합으로 연산 수행
특정 값들을 모두 갖고 있는 튜플을 찾을 때 사용
04. 트랜잭션과 동시성
트랜잭션
DBMS에서 데이터를 다루는 논리적 작업 단위
단일 SQL문을 사용하기도 하지만, 여러 개의 SQL문을 순차적으로 수행하기도 한다.
장애시 데이터를 복구하는 단위
DB에서 여러 작업이 동시에 같은 데이터를 다룰 때 이 작업을 서로 분리하는 단위
전체가 수행되거나 수행되지 않아야한다.
BEGIN TRANSACTION
A 계좌에서 10000을 인출 (UPDATE)
B 계좌에서 10000을 입금 (UPDATE)
COMMIT TRANSACTION
DB에 저장된 데이터를 다루며, DBMS에 처리
트랜잭션의 4가지 성질 (ACID)
원자성(Automicity): 전부 수행되거나 수행되지 않아야한다.
트랜잭션 중간에 작업을 멈추면 recovery 알고리즘을 이용해 변경 내용 취소
자의적으로 트랜잭션을 취소하는 명령은 ROLLBACK 사용
일관성(Consistency): 수행 전이나 수행 후 항상 일관된 상태 유지
테이블이 생성될 때 CREATE, ALTER문의 무결정 제약조건을 통해 명시
수행 중 일관성이 유지하지 못하는 상태가 있을 수 있다.
고립성(Isolation): 수행 중에 다른 트랜잭션이 끼어들어 변경 중인 데이터 값을 훼손하는 일이 없어야 한다.
지속성(Durability): 성공적으로 완료한 데이터는 영구히 저장
DBMS는 작업한 내용을 로그에 기록하고 문제 발생시 로그 파일을 이용해 복구 작업을 수행
동시성
동시 접근에 대한 일관성을 유지하기 위해 동시접근 알고리즘 사용
갱신 손실 문제
2개의 트랜잭션이 1개의 데이터를 동시에 update할 때 발생
DB에서 절대 발생하면 안되는 현상
락
트랜잭션이 데이터를 읽거나 수정할 때 데이터에 표시하는 잠금 장치
동시 처리시 순서를 제어해 갱신 손실 문제 해결
shared lock(읽기), exclusive lock(읽고 쓰기) 각각 LS와 LX로 관리
트랜잭션이 락을 획득받지 못하면 대기 상태 유지
05. 데이터베이스 보안과 권한 관리
권한 관리를 통한 DB 보안
로그인 단계에서 접근 제한 기능 제공
업무의 특성 및 중요도에 따라 특정 사용자만 접근이 필요할 수 있다.
권한에 따라 Read, Write, Execute만 가능 등으로 다양하다.
DB 관리자는 계정 관리를 위한 모든 권한을 가진다.
권한 부여
GRANT 명령어를 사용해 객체에 대한 사용 권한을 부여
GRANT는 모든 속성에 전체 또는 일부 권한 부여
UPDATE, SELECT 속성 중 일부만 부여 가능
GRANT로 권한을 부여받은 권한은 기본적으로 다른 사용자에게 부여할 수 없다.
WITH GRANT OPTION으로 다른 사용자에게 부여 가능
고객 테이블에 대한 삽입과 삭제 권한을 모든 사용자에게 부여
grant insert, delete on 고객 to public
고객 테이블 중 등급과 주소에 대한 수정 권한을 kang에게 부여
grant update(등급, 주소) on 고객 to kang
고객 테이블에 대한 검색 권한을 with grant option으로 kang에게 부여
grant select on 고객 kang with grant option
권한 삭제
REVOKE는 부여된 권한을 삭제
REVOKE 권한 ON 객체 FROM 사용자 CASCAD | RESTRICT;
A → B (부여) → C(부여) 상황에서 B의 권한을 취소하게 되면?
C의 권한도 취소하려면 CASCADE 명령을 사용
C의 권한을 유지하려면 RESTRICT 명령을 사용
REVOKE SELECT ON 고객 FROM Kang CASCADE;
역할(role)
DB 객체에 대한 권한을 모아둔 집합
역할 생성
GRANT ROLE role_name;
생성된 역할에 권한 부여
GRANT 권한 ON 객체 TO role_name;
역할 삭제
DROP ROLE role_name;
역할 생성 및 부여
사용자에게 역할 부여
GRANT role_name TO 사용자;
부여한 역할 삭제
REVOKE role_name FROM 사용자;