일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- MySQL
- 리눅스
- 예외처리
- select문
- 알고리즘
- 입출력
- html
- order by
- scanner
- 웹개발
- mybatis
- JavaScript
- Java
- SQL
- Linux
- select
- 백엔드
- StringBuilder
- 클래스
- 자바
- where
- BufferedReader
- 정보처리기사필기요약
- Git
- 프로그래밍
- 메서드
- 자바스크립트
- 형변환
- DML
- 정보처리기사
- 프론트엔드
- 프로그래머스 SQL
- String클래스
- 백준
- 개발자
- 데이터 조회
- github
- sql문
- 프로그래머스 sql 고득점 kit
- 스프링
- Today
- Total
ToBe끝판왕
[ 3과목 ] 데이터베이스 구축( DB ) 본문
< 참고사항 >
※ 정보처리기사 개정된 후, 기출문제들 다 풀고 3회 정도 반복할 것!
※ 이해 안 되는 문제들은 유튜브를 통해서 이해할 것! ( 전문강사들이 문제풀이 영상 많음 )
※ 게시물은 자주 나오는 필기 기출 내용 위주이지만 스스로 다른 개념들도 확인해볼 것 !
데이터베이스 설계
1) 데이터베이스란?
• 어느 한 조직에서 다수의 이용 시스템들이 공용으로 사용하기 위해 통합 / 저장된 운영 데이터의 집합
• 데이터베이스의 특징
- 실시간 접근 가능
- 계속적인 변화
- 동시 공유 가능
- 내용에 의한 참조 가능
2) 데이터베이스 설계 시 고려 사항
• 무결성 : 삽입 , 삭제 , 갱신 등의 연산 후에도 데이터베이스에 저장된 데이터가 정해진 제약조건을 항상 만족
• 일관성 : 특정 질의에 대한 응답이 처음부터 끝까지 변함없이 일정해야 한다.
• 회복 : 장애 발생 시, 장애 발생 직전의 상태로 복구 가능해야 한다.
• 보안 : 불법적인 데이터의 노출 또는 변경이나 손실로부터 보호할 수 있어야 한다.
• 효율성 : 응답시간의 단축, 시스템의 생산성, 저장공간의 최적화등이 가능해야 한다.
• 데이터베이스 확장 : 운영에 영향을 주지 않으며 지속적으로 데이터를 추가할 수 있어야 한다.
3) 데이터베이스 설계 순서
순서 | 설명 |
요구 조건 분석 | 요구 조건 명세서 작성 |
개념적 설계 ( 정보 모델링, 개념화 ) |
독립적인 개념 스키마 모델링 , 트랜잭션 모델링 ex) E-R 다이어그램 모델 |
논리적 설계 ( 데이터 모델링 ) |
목표 DBMS에 맞는( 종속적인 ) 논리 스키마 설계 ex) 트랜잭션 인터페이스 설계 , 테이블 설계( RDB ) 논리적 데이터베이스 구조로 매핑( Mapping ) 스키마의 평가 및 정제 |
물리적 설계 ( 데이터 구조화 ) |
목표 DBMS에 맞는( 종속적인 ) 물리적 구조의 데이터로 변환 ex) 저장 레코드의 양식 설계 레코드 집중의 분석 및 설계 , 파일의 엑세스(접근) 경로 설계 |
구현 | 목표 DBMS의 DDL( 데이터 정의어 )로 데이터베이스 생성, 트랜잭션 작성 |
※ 물리적 설계 시 고려사항
• 응답 시간 / 저장공간의 효율화 / 트랜잭션 처리량
※ 저장 레코드 양식 설계 고려사항
• 데이터 타입 / 데이터 값의 분포 / 접근 빈도
※ 개념적 설계 단계
• 산출물로 E-R Diagram을 만들 수 있다.
• DBMS에 독립적인 개념 스키마를 설계한다.
• 논리적 설계단계의 앞 단계에서 수행된다.
데이터 모델
1) 데이터 모델의 구성 요소
• 개체( Entity ) : 데이터베이스에 표현하려는 것, 사람이 생각하는 개념이나 정보 단위 같은 현실 세계의 대상체
• 속성( Attribute ) : 데이터의 가장 작은 논리적 단위, 파일 구조상의 데이터 항목 또는 데이터 필드에 해당
• 관계( Relationship ) : 개체 간의 관계 또는 속성 간의 논리적인 연결을 의미
2) 개념적 데이터 모델
현실 세계에 대한 인간의 이해를 돕기 위해 현실 세계에 대한 인식을 추상적 개념으로 표현하는 과정
ex) E-R( Entity-Relation ) 모델
3) 논리적 데이터 모델
• 개념적 모델링 과정에서 얻은 개념적 구조를 컴퓨터가 이해하고 처리할 수 있는 컴퓨터 세계의 환경에 맞도록 변화하는 과정
• 단순히 데이터 모델이라고 하면 논리적 데이터 모델을 의미
ex) 관계 모델 / 계층 모델 / 네트워크 모델
4) 데이터 모델에 표시할 요소
• 구조( Structure ) : 논리적인 개체 타입들 간의 관계, 데이터 구조 및 정적 성질을 표현
• 연산( Operation ) : 실제 데이터를 처리하는 작업에 대한 명세, 조작하는 기본 도구
• 제약 조건( Constraint ) : DB에 저장될 수 있는 실제 데이터의 논리적인 제약조건
관계형 데이터베이스의 구조
1) 튜플( Tuple ), 행( Row ), 레코드( Record )
• 속성의 모임으로 구성
• 파일 구조상 레코드( 실제 데이터 )와 같은 의미
• 튜플의 수 = 카디널 리티( Cardinality ) 또는 기수 / 대응수
2) 속성( Attribute ) , 열( Column ) , 필드( Field )
• 데이터베이스를 구성하는 가장 작은 논리적 단위
• 파일 구조상의 데이터 항목 또는 데이터 필드에 해당
• 개체의 특성을 기술
• 속성의 수 = 디그리( Degree ) 또는 차수
3) 도메인( Domain )
하나의 속성( Attribute ) 이 가질 수 있는 같은 타입 원자( Atomic ) 값들의 집합
ex) 성별 속성( Attribute )의 도메인은 남 / 여 ( 그 외의 값은 입력 X )
4) 관계( Relation ) 의 특징
• 한 Relation( 테이블 )에 포함된 튜플( 행 ) 들은 모두 상이함, 즉 서로 다른 값
• 한 Relation( 테이블 ) 에 포함된 튜플( 행 ) 사이에는 순서 X
• Relation 스키마를 구성하는 속성( 열 ) 간의 순서는 중요하지 X
• 속성은 논리적으로 더 이상 쪼갤 수 없는 원자 값으로 저장
• 각 속성은 식별을 위해 Relation 내에서 유일한 이름을 가짐, 그러나 그에 해당하는 도메인( 속성을 구성하는 값 )
에는 동일한 값이 있을 수 있음
※ 참고사항
• 튜플은 서로 상이한 값을 가지고, 순서가 없다.
• 속성은 원자 값을 가지고, 순서가 중요하지 않으며, 유일한 이름을 가진다.
• 최대 튜플 수 = 각 릴레이션 도메인 값을 서로 곱한 값
• 릴레이션의 차수( Degree ) = 속성의 개수
• 카디 털 리티 수 = 튜플( 행 )의 수 / 차수( Degree ) = 어트리뷰트( 열 ) 의 수
키( Key )
1) 후보 키( Candidate Key )
• Relation. 에 있는 모든 튜플에 대해 유일성과 최소성을 만족시켜야 한다.
• 튜플은 유일하게 식별하기 위해 사용하는 속성들의 부분집합, 즉 기본키로 사용할 수 있는 속성들
모든 Relation에는 반드시 하나 이상의 후보 키가 존재
• 유일성( Unique ) : 하나의 키 값으로 하나의 튜플만을 유일하게 식별할 수 있어야 한다.
• 최소성( Minimality ) : 모든 레코드들을 유일하게 식별하는 데 꼭 필요한 속성으로만 구성되어야 한다.
2) 기본키( Primary Key )
• 후보키 중에서 특별히 선정된 주키( Main Key )로, 중복된 값과 Null 값을 가질 수 없다.
• 후보 키의 성질인 유일성과 최소성을 가지며, 튜플을 식별하기 위해 반드시 필요한 키
3) 대체키( Alternate Key )
후보 키가 둘 이상일 때, 기본키를 제외한 나머지 후보 키를 의미
4) 슈퍼 키( Super Key )
• 한 Relation 내에 있는 속성들의 집합으로 구성된 키
• 모든 튜플에 대해 유일성은 만족시키지만, 최소성은 만족시키지 못한다.
5) 외래 키( Foreign Key )
• 다른 Relation의 기본키를 참조하는 속성 / 속성들의 집합
• 참조되는 Relation의 기본키와 대응돼 Relation 간의 참조 관계를 표현한다.
무결성( Integrity )
• 데이터베이스에 저장된 데이터 값과 그것이 표현하는 현실 세계의 실제값이 일치하는 정확성을 의미
• 부정확한 자료가 데이터베이스 내에 저장되는것을 방지하기 위한 제약조건
1) 개체 무결성( Entity Integrity, 실체 무결성 )
• 테이블의 기본키를 구성하는 어떤 속성( Attribute ) 도 Null 값이나 중복 값을 가질 수 없다.
• 기본키의 속성 값이 Null 값이 아닌 원자 값을 갖는 성질
2) 도메인 무결성( Domain Integrity, 영역 무결성 )
• Relation 내의 튜플들이 각 속성( Attribute )의 도메인에 지정된 값만을 가져야 한다.
3) 참조 무결성( Referential Integrity )
• 외래 키 값은 Null 이거나 참조 Relation의 기본키 값과 동일해야 한다.
• Relation은 참조할 수 없는 외래키 값을 가질 수 없다는 규정
4) 사용자 정의 무결성( User-Defined Integrity )
속성 값들이 사용자가 정의한 제약 조건에 만족해야 한다.
5) 데이터 무결성 강화
• 애플리케이션 : 데이터 생성 / 수정 / 삭제 시 무결성 조건을 검증하는 코드를 데이터를 조작하는 프로그램 내에 추가
• 데이터베이스 트리거 : 트리거 이벤트에 무결성 조건을 실행하는 절차형 SQL을 추가
• 제약 조건 : 데이터베이스에 제약 조건을 설정해 무결성을 유지한다.
관계 대수 / 관계 해석
1) 관계 대수
• 관계형 데이터베이스에서 원하는 정보와 그 정보를 검색하기 위해서 어떻게( How ) 유도하는가를 기술하는 절차적인 언어
• 질의에 대한 해를 구하기 위해 수행해야 할 연산의 순서를 명시
• 순수 관계 연산자
연산자 | 기호 | 의미 |
select ( 선택 ) |
σ | 조건( Predicate )을 만족하는 튜플들의 부분집합 ( 수평연산 ) |
project ( 추출 ) |
ㅠ | 속성들의 부분집합, 중복은 제거 ( 수직연산 ) |
Join ( 조인 ) |
▷◁ ex) R ▷◁ S |
두 개의 Relation이 공통으로 가지고 있는 속성을 이용하여 두 개의 Relation을 하나로 합쳐서 새로운 Relation을 만드는 연산 두 개의 Relation의 연관된 튜플들을 결합 |
Division ( 나누기 ) |
÷ ex) R ÷ S |
R릴레이션에서 S릴레이션의 속성 도메인 값과 일치하는 R릴레이션의 튜플들을 찾아내는 연산 |
• 일반 집합 연산자
연산자 | 기호 | 의미 |
Union ( 합집합 ) |
U ex) R U S |
두 개의 Relation의 합이 추출, 중복은 제거 |
Intersection ( 교집합 ) |
∩ ex) R ∩ S |
R릴레이션과 S릴레이션의 중복되는 값들만 추출 |
Difference ( 차집합 ) |
― ex) R ― S |
R릴레이션에서 S릴레이션에 중복되지 않는 값들만 추출 |
Cartesian Product ( 교차곱 ) |
X ex) R X S |
두 Relation의 가능한 모든 튜플들의 집합 차수( Degree ) 는 더하고 카디널리티( Cardinality ) 는 곱해서 값을 구한다. |
2) 관계 해석( Relational Calculus )
• 관계 데이터 모델의 제안자인 코드가 수학의 Predicate Calculus( 술어 해석 )에 기반을 두고 관계 데이터베이스를 위해 제안
• 원하는 정보가 무엇( What )이라는 것만 정의하는 비절차적 특성
• 튜플 관계 해석, 도메인 관계해석
• 기본적으로 관계 해석과 관계 대수는 관계 데이터베이스를 처리하는 기능과 능력 동등
• 관계 대수로 표현한 식은 관계 해석으로 표현 가능
구분 | 구성요소 | 기호 | 설명 |
연산자 | OR 연산자 | V | 원자식 간 “또는” 이라는 관계로 연결 |
AND 연산자 | ∧ | 원자식 간 “그리고” 라는 관계로 연결 | |
NOT 연산자 | ⌝ | 원자식에 대한 부정 | |
정량자 | 전칭 정량자 ( Universal Quantifier ) |
∀ | 모든 가능한 튜플 “For All” All의 A를 뒤집은 형태 |
존재 정량자 ( Existential Quantifier ) |
∃ | 어떤 튜플 하나라도 존재 “There Exists” Exists의 E를 뒤집은 형태 |
• 관계 대수와 관계 해석 비교
구분 | 관계대수 | 관계해석 |
특징 | 절차적 언어( 순서 명시 ) | 비절차적 언어( 계산 수식의 유연적사용 ) 프레디킷 해석( Predicate Calculus ) 기반 |
목적 | 어떻게 유도하는가? ( How ) | 무엇을 얻을 것인가? ( What ) |
종류 | 순수관계 연산자, 일반집합 연산자 | 튜플 관계 해석, 도메인 관계 해석 |
• 관계 대수식-> SQL 질의로 변환
π 이름 ( σ 학과 = ‘교육’ (학생) ) => Select 이름 from 학생 where 학과 = ‘교육’;
정규화( Nurmalization ) / 반정규화( Denormalization )
• 하나의 종속성이 하나의 릴레이션에 표현될 수 있도록 분해해가는 과정
• 데이터베이스의 논리적 설계 단계에서 수행
1) 정규화의 목적
• 데이터 구조의 안정성 및 무결성 유지
• 어떠한 릴레이션이라도 데이터베이스 내에서 표현 가능하게 만듦
• 효과적인 검색 알고리즘 생성 가능
• 데이터 중복을 배제해 이상( Anomaly )의 발생 방지 및 자료 저장공간의 최소화
• 데이터 모형의 단순화
• 속성과 배열상태 검증 가능
• 개체와 속성의 누락 여부 확인 가능
• 데이터 삽입 시 릴레이션을 재구성할 필요성을 줄임
2) 이상( Anomaly )의 개념
• 정규화를 거치지 않아 데이터베이스 내에 데이터들이 불필요하게 중복되어 릴레이션 조작 시 예기지 못하게
발생하는 곤란한 현상
3) 이상( Anomaly )의 종류
• 삽입 이상( Insertion Anomaly )
- 릴레이션에 데이터를 삽입할 때 의도와 상관없이 원하지 않은 값들도 함께 삽입되는 현상
• 삭제 이상( Deletion Anomaly )
- 릴레이션에서 한 튜플을 삭제할 때 의도와는 상관없는 값들도 함께 삭제되는 현상
• 갱신 이상( Update Anomaly )
- 릴레이션에서 튜플에 있는 속성 값을 경신할 때 일부 튜플의 정보만 갱신되어 모순이 생기는 현상
4) 정규화의 원칙
• 정보의 무손실 / 분리의 원칙 / 데이터의 중복성 감소
5) 정규화 과정
정규형 | 설명 |
1NF ( 제1정규형 ) |
릴레이션에 속한 모든 도메인( Domain ) 이 원자값( Atomic Value ) 만으로 되어있는 정규형 |
2NF ( 제2정규형 ) |
릴레이션 R이 1NF이고, 기본키가 아닌 모든 속성이 기본키에 대해 완전전 함수적 종속을 만족하는 부분적 함수 종속을 제거한 정규형 |
3NF ( 제3정규형 ) |
릴레이션 R이 2NF이고, 기본키가 아닌 모든속성이 기본키에 대해 이행적 함수 종속 관계를 만족하지 않는 정규형 ex) A->B이고 B->C일 때, A->C를 만족하는 관계( 이행규칙 ) |
BCNF ( Boyce-Codd 정규형 ) |
릴레이션 R에서 모든 결정자( Determinant ) 가 후보키인 정규형 모든 BCNF가 종속성을 보존하는 것은 아님 ( 강한 제3정규형, 보이스/코드 정규형 ) |
4NF ( 제4정규형 ) |
릴레이션 R에 다중값( 다치 ) 종속이 성립하는 경우 R의 모든 속성이 A에 함수적 종속 관계를 만족하는 정규형 |
5NF ( 제5정규형 ) |
릴레이션 R의 모든 조인 종속이 R의 후보키를 통해서만 성립되는 정규형 |
6) 반정규화 개념
• 시스템의 성능 향상, 개발 및 운영의 편의성 등을 위해 정규화된 데이터 모델을 통합 / 중복/ 분리하는 과정으로
의도적으로 정규화 원칙을 위배하는 행위
• 시스템의 성능이 향상되고 관리 효율성은 증가하지만, 데이터의 일관성 및 정합성이 저하될 수 있음
• 과도한 반정규화는 오히려 성능을 저하시킬 수 있다.
• 반정규화 방법에는 테이블 통합, 테이블 분할, 중복 테이블 추가, 중복 속성 추가 등
7) 반정규화 방법
• 테이블 통합 : 1 : 1 관계 / 1 : N 관계 / 슈퍼 타입 / 서브타입 { 테이블 통합 }
• 테이블 분할 : 수평 분할 / 수직 분할 -> 기본키의 유일성 관리가 어려워짐
• 중복 테이블 추가 : 집계 테이블 / 진행 테이블 / 특정 부분만을 포함하는 테이블 {추가}
• 중복 속성 추가 : 자주 사용하는 속성을 하나 더 추가하는 것
※ 테이블 통합
• 두개의 테이블이 조인되는 경우가 많아, 하나의 테이블로 합쳐 사용하는것이 성능 향상에 도움이 될 경우 수행
• 두개의 테이블을 조인하여 항상 조회를 수행하는 경우
• 데이터 검색은 간편해지지만, 레코드 증가로 인해 처리량 증가
• 테이블 통합으로 입력, 수정, 삭제 규칙이 복잡해질 수 있음
• Not Null, Default, Check 등의 Constraint 을 설계하기 어려운 점 고려
※ 테이블 분할
• 테이블을 수직 또는 수평으로 분할
• 수평 분할 : 레코드별로 사용 빈도의 차이가 큰 경우 테이블 분할
• 수직 분할 : 하나의 테이블에 속성이 너무 많을 경우 속성을 기준으로 분할
• 기본키 유일성 관리 어려워짐
• 분할된 테이블로 인해 수행속도 느려질 수 있음
※ 중복 테이블 추가
• 많은 양의 범위를 자주 처리해야 하는 경우
• 특정 범위의 데이터만 자주 처리해야 하는 경우
• 정규화로 인해 수행 속도가 느려지는 경우
• 방법
- 집계 테이블의 추가
- 진행 테이블의 추가
- 특정 부분만을 포함하는 테이블 추가
※ 중복 속성 추가
• 조인이 자주 발생하는 속성
• 접근 경로가 복잡한 속성
• 엑세스의 조건으로 자주 사용되는 속성
트랜잭션
• 데이터베이스의 상태를 변환시키는 하나의 논리적 기능을 수행하기 위한 작업의 단위
• 한꺼번에 모두 수행되어야 할 일련의 연산들
• 활동( Active ) : 트랜잭션이 실행중인 상태
• 실패( Failed ) : 트랜잭션 실행에 오류가 발생하여 중단된 상태
• 철회( Aborted ) : 트랜잭션이 비정상적으로 종료되어 Rollback 연산 수행한 상태
• 부분완료( Partically Commited ) : 트랜잭션이 모두 성공적으로 실행한 후, Commit 연산이 실행되기 직전의 상태
• 완료( Commited ) : 트랜잭션을 모두 성공적으로 실행한 후 Commit 연산을 실행한 후 상태
2) 종류
• Commit : 트랜잭션 처리가 정상적으로 종료되어 수행한 변경 내용을 DB에 반영하는 명령어
• RollBack : 트랜잭션 처리가 비정상으로 종료되어 DB의 일관성이 깨졌을 때, 트랜잭션이 행한 모든 변경 작업을 취소하고
이전 상태로 되돌리는 연산
ex) Commit과 RollBack 명령어에 의해 보장받는 특징 : 원자성
• SavePoint( =CheckPoint ) : 트랜잭션 내에서 Rollback 할 위치인 저장점을 지정하는 명령어, 여러 개 지정 가능
3) 트랜잭션의 특성
원리 | 특징 |
원자성 ( Atomicity ) |
트랜잭션 연산을 데이터베이스 모두에 반영되든지 아니면 전혀 반영되지 않아야 함 ( All or Nothing ) |
일관성 ( Consistency ) |
트랜잭션이 실행을 성공적으로 완료할 시 일관성 있는 데이터베이스 상태를 유지 |
독립성 ( Isolation, 격리성 ) |
둘 이상 트랜잭션 동시 실행 시, 한 개의 트랜잭션만 접근이 가능하여 간섭 불가 |
영속성 ( Durability ) |
성공적으로 완료된 트랜잭션 결과는 영구적으로 반영됨 |
4) CRUD 매트릭스
• Create / Read / Update / Delete
• C > D > U > R의 우선순위 적용
• 테이블, 프로세스에 C, R, U, D가 모두 없는 경우
• 테이블에 C 또는 R이 없는 경우( 프로세스는 하나만 있어도 돌아간다. )
※ 기출 참고
트랜잭션의 마지막 연산이 실행된 직후의 상태 : Partially Committed
뷰( VIew )
1) 개요 및 특징
• 기본 테이블로부터 유도된, 이름을 가지는 가상 테이블로 기본 테이블과 같은 형태의 구조를 사용하며
조작도 기본 테이블과 거의 같음
• 가상 테이블이기 때문에 물리적으로 구현되어 있지 않지만 사용자에게 있는 것처럼 간주됨 -> 저장장치 내에 논리적으로 존대
• 정의된 뷰로 다른 뷰를 정의할 수 있다.
• 뷰가 정의된 기본 테이블이나 뷰를 삭제하면 그 테이블이나 뷰를 기초로 정의된 다른 뷰도 자동으로 삭제됨
• update에는 제약이 따른다.
속성 | 설명 |
REPLACE | 뷰가 이미 존재하는 경우 재생성 |
FORCE | 본 테이블의 존재 여부에 관계없이 뷰 생성 |
NORFORCE | 기본 테이블이 존재할 때만 뷰 생성 |
WITH CHECK OPTION | 서브 쿼리 내의 조건을 만족하는 행만 변경 |
WITH READ ONLY | 데이터 조작어( DML ) 작업불가 |
2) 뷰의 장 / 단점
• 장점
- 논리적 데이터 독립성 제공
- 접근 제어를 통한 자동 보안 제공
- 사용자 데이터 관리 용이
• 단점
- 독립적인 인덱스를 가질 수 없음
- 뷰의 정의를 ALTER로 변경할 수 없음 -> DROP 하고 새로 CREATE
- 뷰로 구성된 내용에 대한 삽입 / 삭제 / 갱신/ 연산에 제약이 따름
분산 데이터베이스 설계
1) 정의
논리적으로는 하나의 시스템에 속하지만, 물리적으로는 네트워크를 통해 연결된 여러 개의 컴퓨터 사이트( Site )에
분산되어 있는 데이터베이스
2) 분산 데이터베이스의 구성요소
구성 요소 | 설명 |
분산 처리기 | 자체적으로 처리 능력을 가진다. 지리적으로 분산되어 있는 컴퓨터 시스템 |
분산 데이터베이스 | 지리적으로 분산되어 있는 데이터베이스 해당 지역의 특성에 맞게 구성된 데이터베이스 |
통신 네트워크 | 분산처리기들을 통신망으로 연결해 논리적으로 하나의 시스템처럼 작동할 수 있도록 하는 통신 네트워크 |
3) 분산 데이터베이스의 목표
목표 | 설명 |
위치 투명성 ( Location Transparency ) |
데이터베이스의 실제 위치를 알 필요 없이 단지 데이터베이스의 논리적인 명칭만으로 엑세스 할 수 있음 |
중복 투명성 ( Replication Transparency, 복제 투명성 ) |
동일 데이터가 여러 곳에 중복되어 있더라도 사용자는 마치 하나의 데이터만 존재하는 것처럼 사용하고, 시스템은 자동으로 여러 자료에 대한 작업을 수행 |
병행 투명성 ( Concurrency Transparency ) |
다수의 트랜잭션들이 동시에 실현되더라도 그 트랜잭션의 결과는 영향을 받지 않음 |
분할 투명성 ( Division Transparency ) |
하나의 논리적 릴레이션이 여러 단편으로 분할되어 각 단편의 사본이 여러 시스템에 저장되어 있음을 인식할 필요가 없음 |
장애 투명성 ( Failure Transparency ) |
트랜잭션, DBMS, 네트워크, 컴퓨터 장애가 발생해도 트랜잭션을 정확하게 처리하고 데이터 무결성을 보장함 |
4) 분산 데이터베이스의 장 / 단점
장점 | 단점 |
지역 자치성이 높다. 자료의 공유성 향상 분산 제어 가능 시스템 성능 향상 중앙 컴퓨터의 장애가 전체 시스템에 영향을 끼치지 않음 효용성과 융통성이 높다. 신뢰성 및 가용성이 높다. 점진적 시스템 용량 확장이 용이 |
DBMS가 수행할 기능이 복잡 데이터베이스 설계가 어렵다. 소프트웨어 개발 비용 증가 처리 비용 증가 잠재적 오류 증가 ( 사이트간의 오류 발생률 높음 ) -> 보안의 어려움 |
5) 분산 데이터베이스 설계
애플리케이션이나 사용자가 분산되어 저장된 데이터에 접근하게 하는 것을 목적
분산 설계 방법
• 테이블 위치 분산 : 테이블을 각기 다른 서버에 분산시켜 배치
• 분할( Fragmentation ) : 테이블의 데이터를 분할하여 분산시키는 것
• 할당( Allocation ) : 동일한 분할을 여러 개의 서버에 생성하는 방법
※ 기출 참고
• 물리적으로 분산된 데이터베이스 시스템을 논리적으로 하나의 데이터베이스 시스템처럼
사용할 수 있도록 한 것이다.
• 물리적으로 분산되어 지역별로 필요한 데이터를 처리할 수 있는 지역 컴퓨터( Local Computer )를
분산 처리기( Distributed Processor )라고 한다.
• 분산 데이터베이스 시스템을 위한 통신 네트워크 구조가 데이터 통신에 영향을 주므로
효율적으로 설계해야 한다.
SQL 응용
관계 대수와 관계 해석을 기초로 한 혼합 데이터 언어
1) SQL( Structured Query Language )의 분류
• DDL( Data Define Language, 데이터 정의어 )
DOMAIN( 도메인 ) / SCHEMA( 스키마 ) / TABLE( 테이블 ) / VIEW( 뷰 ) / INDEX( 인덱스 )를
정의하거나 변경 / 삭제할 때 사용하는 언어
명령어 | 기능 |
CREATE | DOMAIN / SCHEMA / TABLE / VIEW / INDEX 정의 |
ALTER | TABLE에 대한 정의 변경 |
DROP | DOMAIN / SCHEMA / TABLE / VIEW / INDEX 삭제 |
• DML( Data Manipulation Language, 데이터 조작이 )
데이터베이스 사용자가 응용 프로그램이나 질의어를 통해 저장된 데이터를 실질적으로 처리하는 데 사용하는 언어
명령어 | 기능 |
SELECT | 테이블에서 조건에 맞는 튜플 검색 |
INSERT | 테이블에 새로운 튜플 삽입 |
DELETE | 테이블에서 조건에 맞는 튜플 삭제 |
UPDATE | 테이블에서 조건에 맞는 튜플의 내용 갱신( 변경 ) |
• DCL( Data Control Language, 데이터 제어에 )
- 데이터의 무결성 / 보안 / 회복 / 병행수행 제어 등을 정의하는 데 사용되는 언어
- 데이터베이스 관리자( DBA )가 데이터 관리를 목적으로 사용
명령어 | 기능 |
COMMIT | 명령에 의해 수행된 결과를 실제 물리적 디스크로 저장 데이터베이스 조작 작업이 정상적으로 완료됐음을 알려주는 명령어 |
ROLLBACK | 아직 COMMIT 되지 않은 변경된 모든 내용들을 취소 데이터베이스를 이전 상태로 되돌리는 명령어 Rollback 연산을 실행한 상태 = 철회( Aborted ) |
GRANT | 데이터베이스 사용자에게 사용 권한 부여 GRANT 권한 리스트 ON 개체 TO 사용자 [WITH GRANT OPTION]; |
REVOKE | 데이터베이스 사용자의 사용 권한 취소 REVOKE [GRANT OPTION FOR] 권한 리스트 ON 개체 FROM 사용자 [CASCADE]; |
2) SELECT
• WHERE 절 : 검색할 조건을 기술
• ORDER BY절 : 특정 속성을 기준으로 정렬해 검색할 때 사용
ex) ASC( 오름차순 ) / DESC( 내림차순 )
• GROUP BY절 : 특정 속성을 기준으로 그룹화해 검색할 때 사용 ( 그룹 함수와 사용 )
• HAVING 절 : GROUP BY와 함께 사용되며 , 그룹에 대한 조건 지정
※ DISTINCT : 중복제거 ( SELECT 명령 뒤에 사용 )
※ WHERE 조건절
구분 | 연산자 | 사례 |
비교 | = , <> , < , <= , > , >= | ex) PRICE < 50000 |
범위 | BETWEEN | ex) PRICE BETWEEN 50000 AND 80000 |
집합 | IN, NOT IN | ex) PRICE IN ( 40000, 50000, 60000 ) |
패턴 | LIKE | ex) NAME LIKE ‘정보%’ |
NULL | IS NULL, IS NOT NULL | ex) PRICE IS NULL |
복합조건 | AND, OR, NOT | ex) PRICE < 50000 AND NAME LIKE ‘정보%’ |
※ 그룹 함수
종류 | 설명 |
COUNT( 속성명 ) | 그룹별 튜플수를 구하는 함수 |
SUM( 속성명 ) | 그룹별 합계를 구하는 함수 |
AVG( 속성명 ) | 그룹별 평균을 구하는 함수 |
MAX( 속성명 ) | 그룹별 최대값을 구하는 함수 |
MIN( 속성명 ) | 그룹별 최소값을 구하는 함수 |
STDDEV( 속성명 ) | 그룹별 표준편차를 구하는 함수 |
VARIANCE( 속성명 ) | 그룹별 분산을 구하는 함수 |
ROLLUP( 속성명, 속성명, ... ) | 인수로 주어진 속성을 대상으로 그룹별 소계를 구하는 함수 하위레벨에서 상위 레벨순으로 데이터 집계 |
CUBE( 속성명, 속성명, ... ) |
인수로 주어진 속성을 대상으로 모든 조합의 그룹별 소계를 구하는 함수 상위 레벨에서 하위레벨 순으로 데이터 집계 |
3) 조인( JOIN )
• 결합을 의미, 관계형 데이터베이스에서의 조인은 교집합 결과를 가지는 결합 방법 의미
• 두 릴레이션으로부터 연관된 튜플들을 결합해, 하나의 새로운 릴레이션을 반환
• 논리적 조인
구분 | 조인 유형 | 설명 |
INNER JOIN ( 내부 조인 ) |
EQUI JOIN ( 동등 조인 ) |
공통 존재 컬럼의 값이 같은 경우를 추출 |
NATURAL JOIN ( 자연 조인 ) |
두 테이블의 모든 컬럼을 비교, 같은 컬럼명을 가진 값이 같은 경우를 추출 |
|
CROSS JOIN ( 교차 조인 ) |
조인 조건이 없는 모든 데이터 조합 추출 | |
OUTER JOIN ( 외부 조인 ) |
LEFT OUTER JOIN ( 왼쪽 외부 조인 ) |
왼쪽 테이블의 모든 데이터와 오른쪽 테이블의 동일 데이터를 추출 |
RIGHT OUTER JOIN ( 오른쪽 외부 조인 ) |
오른쪽 테이블의 모든 데이터와 왼쪽 테이블의 동일 데이터를 추출 |
|
FULL OUTER JOIN ( 완전 외부 조인 ) |
양쪽의 모든 데이터를 추출 |
• 물리적 조인
종류 | 설명 |
NESTED – LOOP JOIN ( 중첩 반복 조인 ) |
2개 이상의 테이블에서 하나의 집합을 기준으로 순차적으로 상대방 ROW를 결합해 원하는 결과를 조합하는 방식 |
SORT – MERGE JOIN ( 정렬 합병 조인 ) |
양쪽 테이블의 정렬한 결과를 차례로 검색하면서 연결고리 형태로 합병하는 방식 |
HASH JOIN ( 해시 조인 ) |
해싱 함수 기법을 활용하여 조인을 수행하는 방식 |
SQL 활용
1) 절차형 SQL
• C++ / JAVA 등의 프로그래밍 언어와 같이 연속적인 실행이나 분기 / 반복 등의 제어가 가능한 SQL
• 일반적인 프로그래밍 언어에 비해 효율이 떨어지지만, 연속적인 작업 처리 적합
• BEGIN ~ END 형식으로 작성되는 블록( Block ) 구조로 기능별 모듈화 가능
2) 프로시저( Procedure )
• 호출을 통해 실행되어 미리 저장해 높은 SQL 작업 수행, 처리 결과는 한 개 이상의 값 혹은 반환 X
• 시스템의 일일 마감 작업, 일괄( Batch ) 작업등에 주로 사용
• DECLARE( 필수 ) : 프로시저의 명칭 / 변수 / 인수 / 데이터 타입을 정의하는 선언부
• BEGIN( 필수 ) : 프로시저의 시작을 의미, 실행부
• CONTROL : 조건문 / 반복문이 삽입되어 순차적으로 처리
• SQL : DML / DCL이 삽입되어 데이터 관리를 위한 작업 수행
• EXCEPTION : BEGIN ~ END 안의 구문 실행 시 예외 발생하면 이를 처리
• TRANSACTION : 수행된 데이터 작업들을 DB에 적용할지 말지 결정하는 처리부
• END( 필수 ) : 프로시저의 종료를 의미, BEGIN/END는 함께 사용
3) 트리거( Trigger )
• 삽입 / 갱신 / 삭제 등의 이벤트가 발생할 때마다 관련 작업을 자동 수행
• 데이터베이스에 저장되며, 데이터 변경 및 무결성 유지 / 로그 메시지 출력 등의 목적으로 사용된다.
• DCL( 데이터 제어에 )을 사용할 수 없으며, DCL이 포함된 프로시저나 함수를 호출하는 경우에도 오류 발생
• 트리거에 오류가 있는 경우 트리거가 처리하는 데이터에도 영향을 미치므로 트리거를 생성할 때 세심한 주의 필요
• DECLARE( 필수 ) : 트리거 명칭 / 변수 / 상수 / 데이터 타입을 정의하는 선언부
• BEGIN( 필수 ) : 트리거의 시작을 의미, 실행부
• CONTROL : 조건문 / 반복문이 삽입되어 순차적으로 처리
• SQL : DML이 삽입되어 데이터 관리를 위한 작업 수행
• EXCEPTION : BEGIN ~ END 안의 구문 실행 시 예외 발생하면 이를 처리
• END( 필수 ) : 프로시저의 종료를 의미, BEGIN/END는 함께 사용
ex) 트리거 명령문
CREATE [ OR REPLACE ] TRIGGER 트리 거명 [ 동작 시기 옵션 ][ 동작 옵션 ] ON
테이블명
REFERENCING [ NEW | OLD ] AS 테이블명
FOR EACH ROW [ WHEN 조건식 ]
BEGIN
트리거 BODY;
END;
※ 동작시기 옵션 : AFTER( 테이블이 변경된 후 트리거 실행 ), BEFORE( 변경되기 전 실행 )
※ NEW( 추가되거나 수정에 참여할 테이블 ) / OLD( 수정되거나 삭제 전 테이블 )
※ FOR EACH ROW : 각 튜플마다 트리거 적용
병행 제어의 로킹( Locking )
• 데이터베이스 / 파일 / 레코드 등은 로킹 단위가 될 수 있다.
• 로킹 단위가 작아지면 데이터베이스 공유도가 증가
• 한꺼번에 로킹 할 수 있는 객체의 크기를 로킹 단위라고 한다.
• 로킹 단위가 작아지면 로킹 오버헤드가 증가한다.
※ 로킹 단위 증가
로크수 감소 / 병행성 감소 / 오버헤드 감소 / 공유도 감소 / 제어기법 간단 => 로킹 단위의 크기와 반대로 움직임
※ 로킹단위 감소
로크수 증가 / 병행성 증가 / 오버헤드 증가 / 공유도 증가 / 제어기법 복잡 => 로킹단위의 크기와 반대로 움직임
데이터베이스 로그( Log ) 필요하는 회복 기법
• 지연 갱신 기법( Deferred Update )
- 트랜잭션이 부분 완료 상태에 이르기까지 발생한 모든 변경 내용을 로그파일에만 저장, 데이터베이스에는
COMMIT이 발생할 때까지 저장을 지연하는 기법
- 트랜잭션이 실패할 경우 UNDO 없이 로그 단순 폐기
• 즉시 갱신 기법( Immediate Update )
- 트랜잭션 수행 도중 데이터를 변경하면 변경 정보를 로그파일에 저장, 부분 완료되기 전이라도 모든 변경 내용을
즉시 데이터베이스에 반영하는 기법
- 로그파일을 참조해 미완료된 변경에 대해 UNDO를 우선 실행, 완료된 변경에 대해 REDO 실행
( UNDO는 COMMITCOMMIT 된 지점이 X )
스키마( Schema )
• 개념 스키마
- 사용자와 데이터베이스 관리자 관점의 스키마
- 데이터베이스에 실제로 어떤 데이터가 저장되었으며, 데이터 간의 관계는 어떻게 되는지를 정의하는 스키마로
전체 관점으로 한 개만 존재하며 접근권한 / 보안 및 무결성 등에 관한 정의를 포함
• 내부 스키마
- 저장장치와 데이터베이스 설계자 및 개발자 관점의 스키마
- 개념 스키마를 물리적 자장 장치에 구현하는 방법을 정의하는 데 사용, 물리적 구조 및 내부 레코드의
물리적 순서 등을 표현
• 외부 스키마
- 사용자 관점의 스키마
- 사용자 또는 프로그램의 입장에서의 논리적 구조로 여러 개가 존재
시스템 카탈로그( System Catalog )
• 사용자를 포함해 DBMS에서 지원하는 모든 데이터 객체에 대한 정의나 명세에 관한 정보를 유지/관리하는 시스템 테이블
• 좁은 의미로는 카탈로그를 데이터 사전( Data Dictionary )라고 한다.
• 시스템 카탈로그에 저장된 정보를 메타 데이터( Meta – Data )라고 한다.
※ 메타 데이터 유형
• 데이터베이스 객체 정보 : 테이블 , 인덱스 , 뷰 등
• 사용자 정보 : 아이디 , 패스워드 , 접근권한 등
• 테이블 무결성 제약조건 정보 : 기본키 , 외래키 , NULL 값 허용 여부 등
• 그 외 : 함수 , 프로시저 , 트리거 등
• 카탈로그의 특징
- 일반 이용자도 SQL 이용해 내용을 검색할 수 있다.
- INSERT / DELETE / UPDATE 문으로 카탈로그를 갱신 허용 X
- DBMS에 따라 상이한 구조를 갖는다.
- 카탈로그는 DBMS가 스스로 생성하고 유지한다. ( 특별한 테이블의 집합체 )
- 사용자가 SQL문을 실행시켜 변화를 주면 시스템이 자동으로 갱신한다.
※ 기출 참고 - 데이터 사전 관련
• 시스템 카탈로그 또는 시스템 데이터베이스라고 한다.
• 데이터베이스에 대한 데이터인 메타데이터( Metadata )를 저장하고 있다.
• 데이터 사전에 있는 데이터에 실제로 접근하는데 필요한 위치정보는 데이터 디렉터리( Data Directory )
라는 곳에서 관리한다.
파티션
• 대용량의 테이블이나 인덱스를 작은 논리적 단위인 파티션으로 나누는 것
• 테이블이나 인덱스를 파티셔닝 하면 파티션 키 or 인덱스키에 따라 물리적으로 별도의 공간에 데이터 저장
• 하나의 테이블의 각 행을 다른 테이블에 분산시키는 것
• 파티셔닝은 수평분할에 활용되는 분할 기법
• 파티션의 장점
- 데이터 접근 시, 엑세스 범위를 줄여 쿼리 성능 향상
- 파티션별로 데이터가 분산되어 저장되므로 디스크의 성능 향상
- 파티션별로 백업 및 복구를 수행하므로 속도가 빠름
- 시스템 장애 시, 데이터 손상 정도를 최소화 할 수 있음
• 파티션의 단점
- 하나의 테이블을 세분화하여 관리하므로 세심한 관리 요구
• 파티션의 종류
- 범위 분할 : 지정한 열의 값을 기준으로 범위 지정하여 분할
- 해시 분할 : 해시 함수를 적용한 결과 값에 따라 데이터 분할
- 조합 분할 : 범위 분할한 후, 해시 함수를 적용하여 다시 분할
- 목록 분할 : 지정한 열 값에 대한 목록을 만들어 이를 기준으로 분할
- 라운드 로빈 분할 : 레코드를 균일하게 분배 ( 레코드가 순차적으로 분배, 기본키 필요 X )
※ 라운드 로빈 분할
• 라운드 로빈 분할은 파티션에 행의 고른 분포를 원할 때 사용
• 해시 분할과 달리, 분할 칼럼을 명시할 필요 X
병행 제어 기법
• 병행 제어는 동시에 여러 개의 트랜잭션을 병행 수행할 때, DB의 일관성을 파괴하지 않도록 제어하는 것
• 종류
로킹 기법 / 타임스탬프 기법 / 최적 병행 수행 기법( 검증 & 확인 & 낙관적 ) / 다중 버전 기법
• 목적
- 시스템 활용도 최대화
- 사용자에 대한 응답 시간 최소화
- 데이터베이스 공유 최대화
- 데이터베이스 일관성 유지
※시분할 기법
사용자가 여러 개의 작업이 동시에 수행하는 것처럼 느끼도록 분할하는 운영체제 운영기법이다.
기출 단어 개념
1) 인덱스( Index )
• 데이터베이스에 저장된 자료를 더욱 빠르게 조회하기 위해 사용된다.
• 데이터베이스 성능에 많은 영향을 주는 DBMS의 구성 요소
• 테이블과 클리스터에 연관되어 독립적인 저장공간 보유
• BETWEEN 등 범위( Range ) 검색에 활용될 수 있다.
• 인덱스의 종류 중 순서 인덱스( Ordered Index )는 B-Tree알고리즘( 오름차순 / 내림차순 지정 가능 )을 활용한다.
• 인덱스는 자동으로 생성되지 X
• 대부분의 데이터베이스에서 테이블을 삭제하면 인덱스도 같이 삭제된다.
2) Recovery
트랜잭션을 수행하는 도중, 장애로 인해 손상된 데이터베이스를 손상되기 이전의 정상적인 상태로 복구시키는 작업
3) 타임스탬프 기법
동시성 제어를 위한 직렬화 기법으로 트랜잭션 간의 처리 순서를 미리 정하는 방법
E-R 모델( 개체 - 관계 )
1) 개요
• 개념적 데이터 모델의 가장 대표적인 것
• 데이터를 개체( Entity ), 속성( Attribute ), 관계( Relationship )으로 묘사
• 특정 DBMS를 고려한 것 X
• E-R 다이어그램으로 1 : 1 / 1 : N / N : M 등의 관계 유형을 제한 없이 나타냄
2) 피터 첸 표기법
'■ 자격증 > 정보처리기사' 카테고리의 다른 글
[ 5과목 ] 정보시스템 구축 관리 (0) | 2022.05.18 |
---|---|
[ 4과목 ] 프로그래밍 언어 활용 (0) | 2022.05.17 |
[ 2과목 ] 소프트웨어 개발 (0) | 2022.05.15 |
[ 1과목 ] 소프트웨어 설계 (0) | 2022.05.12 |