본문 바로가기

정처기

데이터베이스 구축

반응형

★데이터베이스 설계

1) 설계 시 고려사항: 무결성, 일관성, 회복, 보안, 효율성, 데이터베이스 확장

2) 설계 순서★: 요구 조건 분석 ->  개념적 설계(스키마, 트랜잭션 모델링) -> 논리적 설계(논리 스키마, 트랜잭션 인터페이스 설계, 매핑, 스키마 평가 정제) -> 물리적 설계(물리적 구조 데이터로 변환 저장레코드 접근 경로 설계) -> 구현(DBMS, DDL로 데이터베이스 생성 트랜잭션 작성)

(요개논물구)

 

★데이터 모델

1) 구성요소: 개체, 속성, 관계

2) 개념적 데이터 모델: 인식 -> 추상적 개념 E-R모델

3) 논리적 데이터 모델: 컴퓨터 세계 환경에 맞게 변환 (관계모델, 계층모델, 네트워크 모델)

4) 표시할 요소: 구조, 연산(처리작업 조작), 제약조건(논리적)(구연제)

 

★개체

- 속성으로 구성. 개념이나 정보 단위. 자체로 구별 가능

- 유일한 식별자에 의해 식별 가능

- BRP(업무 프로세스 재설계), DFD(자료 흐름도)에 의해 관련 개체 또는 자료 저장소 이용

- 업무에서 사용하는 용어로 지정. 약어 사용은 되도록 제한, 단수 명사. 유일해야 함

 

★속성

- 데이터베이스를 구성하는 가장 작은 논리적 단위

- 데이터 항목 또는 데이터 필드

- 속성의 수를 디그리 또는 차수라고 함

-> 튜플의 수는 카디널리티

- 기본속성, 설계속성, 파생속성이 있음(속성의 특성에 따른 분류)

- 기본키 속성, 외래키속성, 일반속성이 있음(개체 구성 방식에 따른 분류)

- 속성명 지정 원칙: 업무에서 사용하는 용어, 약어 사용 제한, 유일하게 식별 가능

 

★관계- 일대일, 일대다, 다대다

- 종류: 종속, 중복, 재귀, 배타 관계

 

★식별자

- 인스턴스를 융리하게 구분할 수 있는 구분자

(대표성여부) 주식별자(개체 대표 1개체에 1개), 보조식별자(하나의 개체 1개 이상)

(스스로 생성 여부): 내부식별자(개체 내에서 스스로 만들어짐), 외부식별자(외부 개체의 식별자 가져와 사용, 연결자 역할)

(단일 속성 여부): 단일 식별자(주 식별자 1가지 속성), 복합 식별자(주 식별자가 2개 이상 속성)

(대체 여부): 원조 식별자(가공 안 됨), 대리 식별자(하나의 속성으로 묶어 사용)

 

★E-R모델

- 피터첸 표기법

https://m.blog.naver.com/wook2124/222108764534

- 정보공학표기법(크로우즈 핏), 바커표기법

https://hyeonukdev.github.io/2020/05/14/Engineer_Information_Processing/ch12_%EB%85%BC%EB%A6%AC%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4%EC%84%A4%EA%B3%84/%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%AA%A8%EB%8D%B8%EB%A7%81%EB%B0%8F%EC%84%A4%EA%B3%84/%EA%B0%9C%EC%B2%B4%EA%B4%80%EA%B3%84%EB%AA%A8%EB%8D%B8/

크로우즈핏: |: 필수, O: 선택적, <: 다중

바커표기법: ㅡ: 필수, -----------: 선택적, <: 다중

 

★관계형 데이터 모델

 

https://velog.io/@kbj7227/database-%EA%B4%80%EA%B3%84%ED%98%95-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EB%AA%A8%EB%8D%B82

화살표: 1:N 관계, 화살표 없는 건 다대다 관계

http://www.tcpschool.com/mysql/mysql_intro_relationalDB

- 튜플: 속성의 모임, 튜플의 수 = 카디널리티, 대응수

- 속성, 열, 필드: 데이터베이스를 구성하는 가장 작은 논리적 단위, 속성의 수 = 디그리 또는 차수

- 도메인★: 하나의 속성이 가질 수 있는 같은 타입 원자값들의 집합

- 릴레이션의 특징★: 튜플들은 모두 상이, 다른 값. 튜플 사이에는 순서가 없음, 속성은 원자값. 릴레이션 내에서 유일한 이름 가짐

1. 튜플은 서로 상이한 값 가지고 순서가 없음

2. 애트리뷰트는 원자값을 가지고 순서가 중요하지 않으며, 유일한 이름을 가짐

 

★키: 데이터베이스에서 튜플들을 서로 구분할 수 있는 기준이 되는 속성

1) 후보키★: 유일성과 최소성을 만족시켜야 함

2) 기본키: 중복값과 NULL값을 가질 수 없음. 유일성과 최소성을 가짐. 식별

3) 대체키: 후보키가 둘 이상일 때 기본키를 제외한 나머지 후보키

4) 슈퍼키★: 속성들의 집합으로 구성된 키, 유일성은 만족시키지만 최소성은 만족시키지 못함

5) 외래키★: 기본키를 참조하는 속성 또는 속성들의 집합. 릴레이션 간의 참조 관계 표현

 

★무결성

1) 개체 무결성★: 어떤 속성도 NULL값이나 중복값을 가질 수 없음. 원자값을 갖는 성질

2) 도메인 무결성: 튜플들이 각 속성의 도메인에 지정된 값만을 가져야 함

3) 참조 무결성: NULL이거나 참조 릴레이션의 기본키 값과 동일해야 함. 리레이션은 참조할 수 없는 외래키 값을 가질 수 없음

4) 사용자 정의 무결성: 사용자가 정의한 제약 조건에 만족해야 함

5) 데이터 무결성 강화

  - 애플리케이션: 검증 코드를 추가

  - 데이터베이스 트리거: 트리거 이벤트에 무결성 조건을 실행하는 절차형 SQL을 추가

  - 제약 조건: 제약조건 설정해 무결성 유지

 

★관계대수 및 관계해석

1) 관계대수★: 어떻게 유도하는가를 기술하는 절차적인 언어

- 순수관계연산자

https://slidesplayer.org/slide/17821226/

 

- 일반집합 연산자

 

https://jaejin0me.github.io/post/posts94/

 

2) 관계해석

- 비절차적 특성, 튜플 관계해석, 도메인 관계해석, 처리하는 기능과 능력면에서 동등

- 관계대수로 표현한 식은 관계해석으로 표현할 수 있음

https://velog.io/@ln1992/16-%EC%9D%BC%EC%B0%A8-%EB%85%BC%EB%A6%AC-%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4-%EC%84%A4%EA%B3%84

- 관계대수로 표현한 식은 관계해석으로 표현 가능

 

3) 비교

관계대수는 절차적언어, 유도 방법이 목적, 순수관계연산자 일반집합 연산자가 있음

관계해석은 비절차적언어. 프레디킷 해석 기반. 어떤 것을 얻을지가 목적. 튜플 관계해석, 도메인 관계해석

 

★정규화, 반정규화

- 하나의 종속성이 하나의 릴레이션에 표현될 수 있도록 분해하는 과정

- 데이터베이스의 논리적 설계 단계에서 수행

1) 정규화의 목적

 - 안전성 및 무결성 유지

 - 데이터베이스 내에서 어떤것이든 표현 가능

 - 효과적인 검색 알고리즘 생성 가능

 - 이상 발생 방지, 누락 여부 확인 가능, 재구성 필요성을 줄임

2) 이상의 개념 및 종류

 - 정규화를 거치지 않아 데이터가 불필요하게 중복되어 예기치 못하게 발생하는 곤란한 현상

 - 삽입 이상: 의도와 상관 없이 원하지 않은 것도 삽입

 - 삭제 이상: 상관 없는 값들도 함께 삭제

 - 갱신 이상: 일부 튜플의 정보만 갱신되어 모순이 생김

3) 정규화 원칙: 무손실, 분리 원칙, 중복성 감소

4) 정규화 과정

 - 1NF: 릴레이션에 속한 모든 도메인이 원자값만을도 되어 있는 정규형

 - 2NF: 모든 속성이 기본키에 대해 완전 함수적 종속을 만족하는, 부분적 함수 종속을 제거한 정규형

 - 3NF: 이행적 함수 종속 관계를 만족하지 않는 정규형 (이행규칙: A->B, B->C일 때 A->C를 만족하는 관계)

 - BCNF: 모든 결정자가 후보키인 정규형, 종속성을 보존하는 것은 아님

 - 4NF: 다치 종속이 성립하는 경우(함수적 종속 관계를 만족하는 정규형)

 - 5NF: 모든 조인 종속이 후보키를 통해서만 성립되는 정규형

5) 반정규화 개념

 - 시스템의 성능 향상, 정규화된 데이터 모델을 통합, 중복, 분리하는 괒어으로 정규화 원칙을 위배하는 행위

 - 데이터의 일관성 및 정합성이 저할될 수 있음

6) 반정규화 방법

 - 테이블 통합: 1:1, 1:N, 슈퍼타입/서브타입 테이블 통합

 - 테이블 분할: 수평 분할, 수직 분할

 - 중복 테이블 추가: 집계, 진행, 특정 부분 포함 테이블

 - 중복 속성 추가: 자주 사용하는 속성을 하나 더 추가

 

★ 시스템 카탈로그

1) 의미: 정보를 유지 관리하는 시스템 테이블, 데이터 사전 또는 메타 데이터라고도 함

2) 특징

 - 일반 이용자도 SQL로 내용 검색 가능

 - INSERT, DELTE, UPDATE문으로 카탈로그 갱신 불가능

 - DBMS 따라 상이한 구조 가짐

 - DBMS가 스스로 생성하고 유지함

 - SQL문 실행해주면 시스템이 자동으로 갱신함

3) 데이터 디렉터리

 - 실제로 접근시 필요한 정보를 관리 유지하는 시스템

 - 시스템만 접근할 수 있음

 cf) 시스템 카탈로그는 사용자와 시스템 모두 접근 가능

 

★데이터베이스 저장 공간 설계

1) 테이블: 행과 열로 구성, 개체에 대응하는 객체

2) 클러스터드 인덱스 테이블: 순서에 따라 데이터가 저장. 접근 경로가 단축

3) 파티셔닝 테이블: 대용량의 테이블을 갖는 작은 논리적 단위인 파티션으로 나는 테이블, 파티션 키 잘못 구성시 역효과

  -> 레인지 파티셔닝(지정한 열 값 기준), 해시 파티셔닝(해시함수 따라), 리스트 파티셔닝(미리 정해진 그룹핑), 컴포지트 파티셔닝(레인지 후 해시 함수 적용 - 조합 분할)  // 장점: 성능 향상, 가용성 향상, 백업 가능, 경합 감소

4) 외부 테이블: 일반 테이블처럼 이용할 수 있는 외부파일

5) 임시 테이블: 데이터 저장하고 처리할 수 있는 테이블, 임시로 사용하는 테이블, 트랜잭션 종료 시 삭제

6) 컬럼

7) 테이블스페이스: 테이블이 저장되는 논리적인 영역. 물리적으로는 데이터 파일에 저장됨

  - 업무별로 구분해 지정. 테이블과 인덱스는 분리해 저장 

  - 대용량 테이블은 하나의 테이블스페이스에 독립적으롲 ㅓ장

  - LOB 타입의 데이터는 독립적인 공간으로 지정

 

★트랜잭션

- 데이터베이스 상태를 변환시키는 하나의 논리적 기능을 수행하기 위한 작업의 단위

 -> 커밋, 롤백(원자성), 세이브포인트가 있음

2) 특징:

  A(원자성): 아예 다 되던가 안 되던가

  C(일관성): 일관성 있는 데이터베이스 상태 유지

  I(독립성): 동시실행 시 한개의 트랜잭션만 접근 가능하게

  D(영속성: 영구적으로 반영)

3) CRUD

 

★인덱스

1) 개념 및 선정기준, 고려사항

 - 데이터 레코드를 빠르게 접근 위해 <키값, 포인터> 쌍으로 구성된 데이터 구조

 - 컬럼 선정: 수정이 빈번하지 않는 컬럼. 분포도가 좋은 컬럼=단독 인덱스. 인덱스들이 자주 조합되어 사용되는 컬럼=결합인덱스

 - 고려사항: 지나치게 많으면 오버헤드, 인덱스만의 추가적인 저장 공간이 필요, 저장 공간이 분리되도록 설계

2) 인덱스 종류

 - 클러스터드 인덱스, 넌 클러스터드 인덱스

 - 트리 기반 인덱스: 인덱스 저장하는 블록이 트리 구조를 이룸

 - 비트맵 인덱스: 비트 값으로 변환하여 인덱스 키 사용

 - 함수 기반 인덱스: 함수나 수식을 적용해 산출된 값 사용

 - 비트맵 조인 인덱스: 조인된 객체로 구성된 인덱스

 - 도메인 인덱스: 인덱스를 직접 만들어 사용

 

★뷰

- 가상테이블로 기본 테이블과 같은 형태의 구조 사용, 조작도 기본테이블과 같음

- 저장장치 내에 논리적으로 존재

- 정의된 뷰로 다른 뷰 정의 가능

- REPLACE(존재하면 재생성)

- FORCE: 존재 여부 상관 없이 뷰 생성

- NOFORCE: 존재할 때만 뷰 생성

- WITH CHECK OPTION: 서브 쿼리 내의 조건을 만족하는 행만 변경

- WITH READ ONLY: 데이터 조작어 작업 불가

- 뷰의 장단점

 > 장점: 논리적 데이터 독립성 제공, 자동 보안, 데이터 관리 용이

 > 단점: 독립적인 인덱스 가질 수 없고, ALTER로 변경 불가능, 상ㅂ입, 삭제, 갱신 연산에 제약이 따름

 

★클러스터

1) 개요 및 특징

 - 동일한 성격의 데이터를 동일한 데이터 블록에 저장하는 물리적 저장 방법

 - 저장 공간 절약 가능(분포도가 넓은 테이블은)

 - 인덱스를 사용한 처리 부담이 되는 넓은 분포도에 활용

2) 클러스터의 선정기준 및 고려사항

 > 클러스터 테이블 선정

 - 수정이 빈번하지 않는 테이블. ORDER BY, GROUP BY, UNION이 빈번한 테이블

 - 대량의 범위를 액세스하는 경우 적용

 - 처리 범위가 넓으면 단일 테이블 클러스터링

 - 조인이 많으면 다중 테이블 클러스터링 사용

> 고려사항

 - 조회 속도를 향상시켜주지만 입력, 수정,삭제 시 성능 저하

 - 대용량 처리하는 트랜잭션은 클러스터링 하지 않는 게 좋음

 - 클러스터링 된 테이블에 클러스터드 인덱스를 생성하면 접근 성능이 향상됨

 

★분산 데이터베이스 설계

1) 분산데이터베이스 설계

 - 논리적으로는 하나의 시스템에 속하지만 물리적으로는 여러개의 컴퓨터 사이트에 분산되어 있는 데이터베이스

2) 구성요소: 분산 처리기, 분산 데이터베이스, 통신 네트워크

3) 목표: 위치 투명성, 중복 투명성, 병행 투명성, 분할 투명성, 장애 투명성(위복병분장)

4) 장점: 지역자치성이 높음, 공유성 향상, 분산제어 가능, 성능 향상, 독립적, 효용성광 융통성이 높음, 신뢰성 및 가용성이 높음, 용량 확장 용이

    단점: 수행 기능 복잡, 설계 어려움, 개발 비용 증가, 처리비용 증가, 잠재적 오류 증가 -> 보안 어려움

5) 방법: 분할과 할당(분산시키고 여러개 서버에 생성할당), 위치 분산

 

★데이터베이스 이중화, 서버 클러스터링

1) 데이터베이스 이중화: 서비스 중단이나 물리적 손상 발생 시 복구 위해 동일 데이터베이스를 복제해 관리

2) 이중화의 분류 : Eager기법(즉시 적용), Lazy 기법(새로운 트랜젝션에 변경사실 작성해 전달)

3) 이중화 구성 방법: 활동대기(구성 방법 및 관리가 쉬움), 활동활동(2개의 DB가 서로 다른 서비스를 제공, 구성 방법 및 설정이 복잡)

4) 서버 클러스터링: 2대 이상 서버를 하나의 서버처럼 운영하는 기술

 - 고가용성 클러스터링: 하나의 서버에 장애 발생 -> 다른 서버가 대신 처리

 - 병렬 처리 클러스터링: 하나의 작업을 여러 개의 서버에 분산해 처리

 

★데이터베이스 보안/스토리지

1) 데이터베이스 보안: 권한 없는 사용자가 액세스 금지 기술

2) 암호화

3) 암호화방식

 - 개인키 암호 방식(동일키,대칭키) : DES, AES, SEED, ARIA

 - 공개키 암호 방식(비대칭키): RSA, Diffie Gellman

4) 접근 통제: 정보 흐름을 제한하는 것. 접근통제 3요소: 접근통제 정책, 보안모델, 메커니즘

  - 임의 접근통제(DAC): 사용자 신원에 따라 접근 권한 부여

  - 강제 접근통제(MAC): 주체와 객체의 등급을 비교해 접근 권한 부여

5) 접근통제 직책

 - 신분기반정책(DAC): 주체나 그룹의 신분에 근거해 접근 제한(IBP, GBP)

 - 규칙 기반 정책(MAC): 권한에 근거해 접근 제한(MLP, CBP)

 - 역할 기반 정책(RBAC): 주체가 맡은 역할에 근거해 객체의 접근 제한

6) 접근통제 메커니즘

 - 접근통제 목록(ACL): 객체를 기준으로 어떤 행위를 할 수 있는지를 기록한 목록

 - 능력 리스트(CL): 주체를 기준으로 자원 및 권한을 기록한 목록

7) 접근통제 보안 모델

 - 기밀성 모델: 군사적 목적. 최초 수학적 모델. 기밀성 보장 - 벨라파듈라 모델

 - 무결성 모델: 정보변경 방지. - 비바모델

 - 접근통제:  - 접근통제 행렬

8) 데이터베이스 백업 종류

 - 물리백업: 로그파일 백업 실시(완전 복구)/없음(백업 시점까지 복구)

 - 논리백업: DBMS유틸리티(백업 시점까지 복구)

9) 스토리지

 - DAS: 서버와 저장장치를 케이블로 연결, 속도가 빠르고 설치운영이 쉬움, 비용저렴, 파일공유 불가능, 확장 및 유연성 떨어짐

 - NAS: 서버와 저장장치를 네트워크로 연결, 저장장치에 수비게 접근, 확장성 및 유연ㅇ성 우수, 접속 증가 시 성능 저하

 - SAN: 전용 네트워크를 별도로 구성한 방식, 파이버 채널 스위치로 네트워크 구성, 광케이블로 처리속도 빠름. 확장성, 유연성,가용성 뛰어남, 설치비용이 많이 듦

 

★논리 데이터 모델의 물리 데이터 모델 변환 및 품질 검토

1) 일반적인 변환 절차

- 단위 개체를 테이블로, 속성을 컬럼, UID->기본키, 관계 -> 외래키, 컬럼 유형과 길이 정의 -> 반정규화 수행

2) 슈퍼타입/서브타입을 테이블로 변환

 - 슈퍼타입 기준 테이블 변환: 서브타입을 슈퍼타입에 통합해 하나의 테이블로 만듦

 - 서브타입 기준 테이블 변환: 슈퍼타입 속성들을 각각의 서브타입에 추가해 서브타입들을 개별적인 테이블로 만드는 것

 - 개별타입 기준 테이블 변환: 슈퍼 타입과 서브타입들을 각각의 개별적인 테이블로 변환하는 것

3) 물리 데이터 모델 품질 기준(=논리 데이터 모델 품질 기준)

 - 정확성: 정확하게 표현

 - 완전성: 누락 없이 정의하고 반영

 - 준거성: 정확하게 준수

 - 최신성: 최근 이슈나 현행 시스템 반영

 - 일관성: 일관성 유지

 - 활용성: 변경이 최소화될 수 있도록 설계

 

★ SQL 응용

- 관계대수와 관계해석을 기초로 한 혼합 데이터 언어

1) SQL의 분류

- DDL(정의어): 도메인, 스키마, 테이블, 뷰, 인덱스를 정의, 변경 또는 삭제할 때 사용하는 언어

  > CREATE, ALTER, DROP(CASCADE_함께 제거, RESTRICTED_참조 중이면 제거 취소)

- DML(조작어)★: 데이터 조작어

  > SELECT, INSERT, DELETE, UPDATE

- DCL(제어어): 데이터의 무결성, 보안, 회복, 병행수행 제어 등을 정의하는데 사용되는 언어

  > 커밋, 롤백, GRANT, REVOKE

2) SELECT

 - WHERE절: 검색할 조건을 기술

 - ORDER BY절: 정렬해 검색할 때 사용

 - GROUP BY절: 그룹화해 검색할 때 사용

 - HAVING절: GROUP BY와 함께 사용되며 그룹에 대한 조건 지정

 - 집계/그룹함수 : COUNT(속성명), SUM(). AVG(), MAX(), MIN(), STDDEV()//표준편차, VARIANCE()//분산, ROLLUP(속성명, 속성명,...)//그룹별 소계, CUBE(속성명, 속성명,...)//모든 조합의 그룹별 소계를 구하는 함수.

 - 윈도우 함수: GROUP BY 절을 사용하지 않고 속성의 값을 집계할 함수를 기술함

   > PARTITION BY: 윈도우 함수가 적용될 범위로 사용할 속성 지정

   > ROW NUMBER(): 일련 번호를 반환함 ex)1,2,3,4,5

   > RANK(): 공동순위를 반영함 ex)1,1,1,4,5

   > DENSE_RANK(): 순위 반환 공동순위를 무시하고 순위 부여 ex)1,1,1,2,3

3) 조인

 - 결합을 의미하며 관계형 데이터베이스에서의 조인은 교집합 결과를 가지는 결합 방법을 의미

 - 두 릴레이션으로부터 연관된 튜플들을 결합해 하나의 새로운 릴레이션을 반환

 - INNER JOIN: EQUAL JOIN(컬럼 값 같은 경우), NATURAL JOIN(같은 컬럼명), CROSS JOIN(조인 조건 없는 거 모두 추출)

 - OUTER JOIN: LEFT OUTER JOIN, RIGHT OUTER JOIN, FULL OUTER JOIN

 - 물리적 조인: NESTED-LOOP JOIN(중적 반복 조인. 순차적으로 상대방 ROW 결합해 원하는 결과 조함), SORT-MERGE JOIN(정렬합병조인. 연결고리 형태로 합병하는 방식), HASH JOIN(해시조인. 해싱 함수 기법을 활용하여 조인을 수행하는 방식)

 

★SQL활용

1) 절차형 SQL: 연속적인 실행이나 분기, 반복 등의 제어가 가능한 SQL, BEGIN ~ END형식으로 작성되는 블록 구조로 기능별 모듈화 가능

2) 프로시저: 미리 저장해 놓은 SQL 작업 수행. 한개 이상의 값 혹은 반환을 아예 하지 않음. 마감 작업 또는 일괄 작업 등에 주로 사용

  > DECLARE(필수): 프로시저의 명칭, 변수, 인수, 데이터 타입을 정의하는 선언부

  > BEGIN(필수): 시작, 실행부

     - CONTROL: 조건문 또는 반복문이 삽입되어 순차적으로 처리됨

     - SQL: DML, DCL이 삽입되어 데이터 관리를 위한 작업 수행

     - EXCEPTION: BEGIN ~ END 안의 구문 실행 시 예외가 발생하면 이를 처리

     - TRANSACTION: DB에 적용할지 말지 결정하는 처리부

   > END(필수): 프로시저의 종료 의미.

 ex) ON REPLACE: 이미 존재 시 대체 가능, EXECUTE, EXEC, CALL, DROP PROCEDURE 프로시저명

3) 트리거

 - 삽입, 갱신, 삭제 등의 이벤트가 발생할 때마다 관련 작업 자동 수행

 - db에 저장되며 데이터 변경 및 무결성 유지, 로그 메시지 출력 등의 목적으로 사용

 - 데이터 제어어를 사용할 수 없으며 DCL이 포함된 프로시저나 함수를 호출하는 경우에도 오류 발생

 - 트리거에 오류가 있는 경우 트리거가 처리하는 데이터에도 영향을 미치므로 트리거를 생성할 때 세심한 주의가 필요

  > DECLARE(필수): 트리거의 명칭, 변수 및 상수, 데이터 타입을 정의하는 선언부

  > EVENT(필수) 트리거가 실행되는 조건 명시

  > BEGIN(필수): 트리거의 시작, 실행부

    - CONTROL: 조건문 또는 반복문이 삽입되어 순차적으로 처리

    - SQL: DML문이 삽입되어 데이터 관리를 위한 작업 수행

    - EXCEPTION: BEGIN ~ END 안의 구문 실행 시 예외가 발생하면 이를 처리

  > END(필수): 트리거의 종료 의미

  ex) REFERENCING, FOR EACH ROW, AFTER(변경된 후 트리거 실행), BEFORE(변경 전 실행), NEW(추가되거나 수정에 참여할 테이블), OLD(수정되거나 삭제 전 테이블), FOR EACH ROW(각 튜플마다 트리거 적용), DROP TRIGGER 트리거명

3) 사용자 정의 함수

 - 프로시저와 유사하게 SQL을 사용해 일련의 작업을 연속적으로 처리

 - 예약어 RETURN을 사용해 처리 결과를 단일값으로 변환

 - DML문의 호출에 의해 실행됨

 - RETURN을 통해 값을 반환해 출력 파라미터가 없음. SELECT로 조회만 가능

 - 프로시저를 호출해 사용할 수 없음

 > 프로시저는 반환값이 없거나 1개 이상, 파라미터=입,출력 가능(IN, OUT), DML/DCL 사용 가능, 프로시저, 사용자정의함수로 호출, 실행문으로 사용

 > 사용자 정의 함수는 반환값이 1개, 파라미터=입력만 가능, SELECT명령문만 사용 가능, 사용자 정의 함수로 호출, DML에 포함해서 사용

 

★DBMS 접속 기술

1) 웹 응용 시스템의 구조: 사용자, 웹서버, WAS, DBMS

2) DBMS 접속 기술

  - JDBC: 자바 언어로 SQL문을 수행할 때 사용되는 표준 API, 접속하는 DBMS에 대한 드라이버가 필요

  - ODBC: DBMS 종류를 몰라도 됨

3) 정적 SQL: 커서를 통한 정적 처리, 반복문 활용해서 SQL 작성, 실행속도 빠르고 사전검사 가능

    동적 SQL: 문자열 변수에 담아 동적 처리. NVL 함수를 사용할 필요 없이 로직을 통해 SQL 작성. 실행속도 느림, 불가능 -> SQL 변형 위험

 

★ORM

 - 객체와 RDB의 데이터를 연결하는 기술

 - 데이터베이스와 독립적이므로 재사용 및 유지보수 용이, 직관적이고 간단하게 데이터 조작 가능

 - ORM 프레임워크

   > JAVA: JPA, Hibernate, Eclipse Link, Data Nucleus, Ebean

   > C++: ODB, QxOrm

   > Python: Django, SQL Alchemy, Storm

   > iOS: Core Date, Database Objects

   > .NET: NHibernate, Database Objects, Dapper

   > PHP: Doctrine, Propel, RedBean

  - ORM 한계: 자동으로 SQL을 작성하기 때문에 의도대로 작성되었는지 확인해야 함. 프로젝트가 크고 복잡해질수록 적용 어려움.

 

★쿼리 성능 최적화

 - 최적화 전 성능 측정도구인 APM(Application Performance Management)를 사용해 최적화할 쿼리를 선정해야 함.

 - 실행 계획을 EXPLAIN 명령어 통해 검토하고 SQL 코드와 인덱스 재구성

1)

 - RBO(Rule Based Optimizer): 규칙에 정의된 우선순위, 개발자의 SQL 숙련도가 성능 기준, 실행 계획 예측 쉬움, 개발자의 규칙 이해도와 규칙의 효용성 고려 필요

 - CBO(Cost Based Optimizer): 액세스비용이 최적화 기준, 예측 성능이 성능 기준, 성틍 통계치 정보 활용, 예측이 복잡함. 비용산출공식의 정확성 고려 필요

2) SQL 코드 및 인덱스 재구성

  - SQL코드 재구성: 존재 확인에는 IN보다 EXISTS 활용. 잘못되었다고 판단하는 경우 힌트를 활용해 변경

  - 인덱스 재구성: 인덱스의 추가 및 변경은 다른 SQL문에도 영향을 줄 수 있으므로 신중히 결정, 읽기로만 사용되면 IOT(Index-Organized Table)구성 고려

 

★데이터 전환

1) 정의

 - 데이터를 추출하여 새로 갤발할 정보 시스템에서 운영가능하도록 변환한 후, 적재하는 일련의 과정

  - ETL: 추출, 변환, 적재 과정

  - 데이터 이행: 데이터 이관이라고도 함

2) 데이터 전환 계획서

 - 데이터 전환 개요: 데이터 전환 목표, 주요 성공 요인, 전제조건 및 제약 조건

 - 데이터 전환 대상 및 범위

 - 데이터 전환 환경 구성: 원천 시스템 구성도, 목적 시스템 구성도, 전환 단계별 DISK 사용량

 - 데이터 전환 조직 및   역할: 데이터 전환 조직도, 조직별 역할

 - 데이터 전환 일정

 - 데이터 전환 방안: 전환 규칙, 절차, 방법, 설계, 개발 및 테스트 계획, 데이터 전환 계획, 검증 방안

 - 데이터 정비 방안: 정비 대상 및 방법, 일정 및 조직

 - 비상계획: 종합상황실 및 의사소통 체계

 - 데이터 복구 대책

 

★WHERE조건

1)비교, 범위, 집합(IN, NOT IN 10 또는 20 또는 30 -> IN(10,20,30)), 패턴(LIKE), NULL, AND, OR, NOT

2)Like와 같이 사용하는 와일드 문자 -> +, %, [], [^], _(특정 위치)

3)주석처리: --, /* */

4)힌트의 사용: --+, /*+ */ : 사전 정보를 줘서 SQL 문 실행에 빠른 결과를 가져오는 효과를 만드는 문법

5)집합 연산자: 테이블을 집합 개념으로 보고, 두 테이블 연산에 집합 연산자를 사용하는 방식

  -> UNION(중복행 제거), UNION ALL(제거되지 않음), INTERSECTION(교집합), MINUS(차집합)

6)서브쿼리: 단일행 서브쿼리(결과가 1건 이하), 다중행서브쿼리(실행결과가 여러건), 다중컬럼서브쿼리(결과가 여러 컬럼으로 반환)

7)데이터의 지역화: 저장 데이터를 효율적으로 이용할 수 있도록 저장하는 방법, 구역성이라고도 함

  -> 데이터 지역화 종류: 시간적 구역성, 공간적 구역성, 순차적 구역성(저장된 순서대로)

  -> 데이터 지역화를 활용한 관리 기법:

         - 기억장치 계층구조(CPU -> 캐시 멤뢰 -> 메인메모리 순서),

         - 캐시 접근시간 단축(캐시 적중률 극대화 가능),

         - 워킹세트(자주 접근하는 페이지 집합, 페이지 폴트를 줄여 스레싱 감소)

 

★기출문제

1) 병행제어의 로킹 단위

 - 한번에 한명만 사용할 수 있게 잠그는 단위.

 - 로킹 대상이 되는 객체 크기를 로킹단위라고 함

 - 데이터베이스, 파일, 레코드 등은 로킹 단위가 될 수 있음.

 - 한번에 로킹할 수 있는 객체의 크기를 로킹 단위라고 함

 - 로킹 단위가 작으면 오버헤드가 증가, 데이터베이스 공유도가 증가

 - 로킹 단위가 크면 로킹 오버헤드가 감소, 공유도가 감소

2) 데이터베이스 로그를 필요로 하는 회복 기법

 - 지연 갱신 기법: 모든 변경 내용을 로그 파일에만 저장하고 커밋 발생할 때까지 저장을 지연, 트랜잭션 실패 시 UNDO 없이 로그 단순 폐기

 - 즉시 갱신 기법: 데이터 변경하면 변경 정보를 로그 파일에 저장하고 부분 완료되기 전까지라도 모든 변경 내용을 즉시 데이터베이스에 반영, 로그 파일을 참조에 미완료된 변경에 대해 UNDO를 우선 실행 후 완료된 변경에 대해 REDO 실행

 

출처:m.blog.naver.com/wook2124/222102990691

 

 

 

 

반응형

'정처기' 카테고리의 다른 글

정보처리기사 실기 정리  (0) 2021.07.07
정보시스템 구축 관리  (0) 2021.05.14
프로그래밍 언어 활용  (0) 2021.05.09
소프트웨어 개발  (0) 2021.05.08
소프트웨어 설계  (1) 2021.05.06