* 정의

 

프로시저(procedure)는 절차영 SQL을 활용하여 특정 기능을 수행하는 일종의 트랜잭션 언어로 호출을 토해 실행되어 미리 저장해 놓은 SQL 작업을 수행한다.

 

프로시저를 만들어 데이터베이스에 저장하면 여러 프로그램에서 호출하여 사용할 수 있으며 데이터베이스에 저장되어 수행되기 때문에 스토어드 프로시저(stored procedure)라고도 불린다. 시스템의 일일 마감 작업, 일괄(Batch) 작업 등에 주로 사용된다.

 

 

* 동작 방식

 

- 구성

 

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

@ BEGIN / END : 프로시저의 시작과 종료를 의미

@ CONTROL : 조건문이나 반복문이 삽입되어 순차적으로 처리

@ SQL : DML, DCL로 데이터 관리를 위한 조회, 추가, 수정 삭제 작업을 수행

@ EXCEPTION : BEGIN ~ END 안의 구문 실행 시 예외가 발생하면 이를 처리하는 방법을 정의

@ TRANSACTION : 수행된 데티어 작업들을 DB에 COMMIT할지 ROLLBACK할지 결정하는 처리부

 

 

- 생성

 

CREATE [OR REPLACE] PROCEDURE 프로시저명(파라미터)
[지역변수 선언]
BEGIN
  프로시저 BODY
END;

@ OR REPLACE : 사용시 동일한 프로시저 이름이 이미 존재하는 경우 대체

@ 파라미터 : 매개변수명 + IN/OUT/INOUT + 자료형으로 구성

  • IN : 호출 프로그램이 프로시저에게 값을 전달할 때
  • OUT : 프로시저가 호출 프로그램에게 값을 반환할 때
  • INOUT : 호출 프로그램이 프로시저에게 값을 전달하고 프로시저 실행 후 다시 호출 프로그램에게 반환할 때

@ 프로시저 BODY : 프로시저 코드를 기록하는 부분으로 BEGIN에서 END까지이다. 이 사이에 적어도 하나의 SQL문이 존재하여야 한다.

 

 

- 실행

 

EXECUTE 프로시저명;
EXEC 프로시저명;
CALL 프로시저명;

 

 

- 제거

 

DROP PROCEDURE 프로시저명;

 

'DB' 카테고리의 다른 글

트랜잭션  (0) 2022.02.27
정규화  (0) 2022.02.27
데이터베이스 키의 개념과 종류  (0) 2022.02.27
SQL  (0) 2021.11.10

* 정의

 

트랜잭션은 데이터베이스의 상태를 변환시키는 하나의 논리적 기능을 수행하기 위한 작업의 단위 또는 한꺼번에 모두 수행되어야할 일련의 연산들을 의미한다.

 

데이터베이스 시스템에서 병행 제어 및 회복 작업 시 처리되는 작업의 논리적 단위로 사용되거나 사용자가 시스템에 대한 서비스 요구 시 시스템이 응답하기 위한 상태변환 과정의 작업단위로 사용된다.

 

 

* 특성

 

데이터의 무결성(integrity)을 보장하기 위하여 DBMS에서 트랜잭션이 가져야할 특성이다.

Atomicity(원자성) @ 트랜잭션의 연산은 데이터베이스에 모두 반영되도록 Commit되든지 아니면 전혀 반영되지 않도록 Rollback되어야 한다.
@ 트랜잭션 내의 모든 명령은 반드시 완벽히 수행되어야 하며 모두가 완벽히 수행되지 않고 하나라도 오류가 발생한다면 트랜잭션 전부가 취소되어야 한다.
Consistency(일관성) @ 트랜잭션이 그 실행을 성공적으로 완료하면 언제나 일관성 있는 데이터베이스 상태로 변환한다.
@ 시스템이 가지고 있는 고정 요소는 트랜잭션 수행 전과 트랜잭션 수행 완료 후의 상태가 같아야 한다.
Isolation(독립성, 격리성, 순차성) @ 둘 이상의 트랜잭션이 동시에 병행 실행되는 경우 어느 하나의 트랜잭션 실행중에 다른 트랜잭션의 연산이 끼어들 수 없다.
@ 수행중인 트랜잭션은 완전히 완료될 때까지 다른 트랜잭션에서 수행 결과를 참조할 수 없다.
Durability(영속성, 지속성) @ 성공적으로 완료된 트랜잭션의 결과는 시스템이 고장나더라도 영구적으로 반영되어야 한다.

'DB' 카테고리의 다른 글

프로시저  (0) 2022.02.27
정규화  (0) 2022.02.27
데이터베이스 키의 개념과 종류  (0) 2022.02.27
SQL  (0) 2021.11.10

* 정의

 

관계형 데이터베이스의 설계에서 중복을 최소화하게 데이터를 구조화하는 프로세스를 정규화(normalization)라고 한다. 크고 잘못 설계된 테이블과 관계들을 작고 잘 조직된 테이블과 관계들로 나누는 것을 포함한다.

 

 

 

* 목적

 

  • 데이터 구조의 안정성 및 무결성을 유지한다.
  • 효과적인 검색 알고리즘을 생성한다.
  • 데이터 중복을 배제하여 이상의 발생 방지 및 데이터 저장 공간을 최소화한다.
  • 데이터 삽입 시 테이블을 재구성할 필요성을 줄인다.
  • 데이터 모형을 단순화한다.
  • 자료 검색과 추출의 효율성을 추구한다.

 

- 이상의 개념 및 종류

 

정규화를 거치지 않으면 데이터베이스 내에 데이터들이 불필요하게 중복되어 테이블 조작 시 예상치 못한 현상이 발생하는데, 이를 이상(anomaly)이라고 한다.

 

이상의 종류는 3가지이며 다음과 같다.

 

@ 삽입 이상(insertion anomaly)

 : 테이블에 데이터를 삽입할 때 원하지 않은 값들도 함께 삽입되는 현상이다.

 

@ 삭제 이상(deletion anomaly)

 : 테이블에서 튜플을 삭제할 때 원하지 않은 값들도 함께 삭제되는 현상이다.

 

@ 갱신 이상(update anomaly)

 : 테이블에서 튜플의 속성값을 갱신할 때 일부 튜플의 정보만 갱신되어 정보에 모순이 생기는 현상이다.

 

 

 

* 정규화 과정

 

 

- 1NF(제1정규형)

 

테이블에 속한 모든 도메인(domain)이 원자값(atomic value)로만 되어 있는 정규형이다. 

 

 

- 2NF(제2정규형)

 

제1정규화를 진행한 테이블에 대해 기본키가 아닌 모든 속성이 기본키에 대하여 완전 함수 종속을 만족하는 정규형이다.

 

@ 함수 종속 : 데이터들이 어떤 기준값에 의해 종속되는 것을 의미한다. B가 A에 함수 종속이라면 A->B로 표기한다.

@ 완전 함수 종속 : A, B가 각각 관계 R의 속성이고 B가 A에 함수 종속(A->B)인 경우, A의 임의의 부분 집합에 대하여 B의 어떤 값도 A의 부분 집합의 값에 대응하지 않으면 B는 A에 완전 함수 종속이라고 한다.

 

 

- 3NF(제3정규형)

 

제2정규화를 진행한 테이블에 대해 기본키가 아닌 모든 속성이 기본키에 대해 이행적 종속을 만족하지 않는 정규형이다.

 

@ 이행적 종속 : A->B 이고 B->C 일 경우에만 A->C 이면 이행적 종속이라고 한다.

 

 

- BCNF(Boyce-Codd 정규형)

 

제3정규화를 진행한 테이블에 대해 모든 결정자가 모두 후보키인 정규형이다.

 

  • 키가 아닌 모든 속성은 각 키에 대해서 완전 종속해야한다.
  • 키가 아닌 모든 속성은 그 자신이 부분적으로 들어가 있지 않은 모든 키에 대하여 완전 종속해야 한다.
  • 키가 아닌 속성에 대해서는 완전 종속할 수 없다.

 

 

- 4NF(제4정규형)

 

다치 종속 제거

 

 

- 5NF(제5정규형)

 

조인 종속성 이용

 

 

 

그림으로 보면 다음과 같다.

 

'DB' 카테고리의 다른 글

프로시저  (0) 2022.02.27
트랜잭션  (0) 2022.02.27
데이터베이스 키의 개념과 종류  (0) 2022.02.27
SQL  (0) 2021.11.10

* 정의

 

키는 데이터베이스에서 조건에 만족하는 튜플을 찾거나 순서대로 정렬할 때 튜플(tuple)들을 서로 구분할 수 있는 기준이 되는 속성(attribute)를 의미한다.

 

 

* 종류

 

- 후보키(Candidate Key)

 

테이블을 구성하는 속성들 중에서 튜플을 유일하게 식별하기 위해 사용하는 속성들의 부분집합으로 기본키로 사용할 수 있는 속성들을 의미한다.

 

  • 하나의 테이블내에서는 중복된 튜플들이 있을 수 없기 때문에 모든 테이블에는 반드시 하나 이상의 후보키가 존재한다.
  • 후보키는 테이블에 있는 모든 튜플에 대해서 유일성과 최소성을 만족시켜야 한다.

          유일성(unique) : 하나의 키 값으로 하나의 튜플만들 유일하게 식별할 수 있어야 한다.

          최소성(minimality) : 모든 레코드들을 유일하게 식별하는 데 꼭 필요한 속성으로만 구성되어야 한다.

 

 

- 기본키(Primary Key)

 

후보키 중에서 특별히 선정된 주키(main key)로 중복된 값을 가질 수 없다.

 

  • 한 테이블에서 특정 튜플을 유일하게 구별할 수 있는 속성이다.
  • 기본키는 후보키와 마찬가지로 유일성과 최소성을 가진다.
  • 기본키는 NULL 값을 가질 수 없다.

 

 

- 대체키(Alternate Key)

 

후보키가 둘 이상일 때 기본키를 제외한 나머지 후보키를 의미한다. 보조키라고도 한다.

 

 

- 슈퍼키(Super Key)

 

한 테이블 내에 있는 속성들의 집합으로 구성된 키로서 모든 튜플에 대해 유일성은 만족시키지만 최소성은 만족시키지 못한다.

 

간단히 그림으로 다음과 같이 표현된다.

 

 

 

 

- 외래키(Foreign Key)

 

다른 테이블의 기본키를 참조하는 속성 또는 속성들의 집합을 의미한다.

 

  • 참조되는 테이블의 기본키와 대응되어 테이블 간에 참조 관계를 표현한다.
  • 한 테이블에 속한 A와 참조 테이블의 기본키인 B가 동일한 도메인 상에서 정의되었을 때 속성 A를 외래키라고 한다.
  • 외래키로 지정되면 참조 테이블의 기본키에 없는 값은 입력할 수 없다.

'DB' 카테고리의 다른 글

프로시저  (0) 2022.02.27
트랜잭션  (0) 2022.02.27
정규화  (0) 2022.02.27
SQL  (0) 2021.11.10

* 정의

 

SQL(structured query language)는 관계형 데이터베이스 관리 시스템(RDBMS)의 데이터를 관리하기 위해 설계된 특수 목적의 프로그래밍 언어이다. 많은 데이터베이스 관련 프로그램들이 SQL을 표준으로 채택하고 있다. 언어로 채택하고 있다. 질의어지만 질의 기능뿐 아니라 데이터의 구조의 정의, 데이터 조작, 데이터 제어 기능을 모두 갖추고 있다.

 

 

* 종류

 

- DDL

 

DDL(data define language, 데이터 정의어)은 SCHEMA, DOMAIN, TABLE, VIEW, INDEX를 정의하거나 변경 또는 삭제할 때 사용하는 언어이다. 논리적 데이터 구조와 물리적 데이터 구조의 사상을 정의하며, 주로 데이터베이스 관리자나 데이터베이스 설계자가 사용한다.

 

명령어 기능
CREATE SCHEMA, DOMAIN, TABLE, VIEW, INDEX를 정의한다.
ALTER TABLE에 대한 정의를 변경하는데 사용한다.
DROP SCHEMA, DOMAIN, TABLE, VIEW, INDEX를 삭제한다.

 

 

- DML

 

DML(data manipulation language, 데이터 조작어)은 데이터베이스 사용자가 응용 프로그램이나 질의어를 통하여 저장된 데이터를 실질적으로 처리하는 데 사용되는 언어이다. 데이터베이스 사용자와 데이터베이스 관리 시스템 간의 인터페이스를 제공한다.

 

명령어 기능
SELECT 테이블에서 조건에 맞는 튜플을 검색한다.
INSERT 테이블에 새로운 튜플을 삽입한다.
DELETE 테이블에서 조건에 맞는 튜플을 삭제한다.
UPDATE 테이블에서 조건에 맞눈 튜플의 내용을 변경한다.

 

 

- DCL

 

DCL(data control language, 데이터 제어어)은 데이터의 보안, 무결성, 회복, 병행 수행 제어 등을 정의하는 데 사용되는 언어이다. 데이터베이스 관리자가 데이터 관리를 목적으로 사용한다.

 

명령어 기능
COMMIT 명령에 의해 수행된 결과를 실제 물리적 디스크에 저장하고, 데이터베이스 조작 작업이 정상적으로 완료되었음을 관리자에게 알려준다.
ROLLBACK 데이터베이스 조작 작업이 비정상적으로 종료되었을 때 원래의 상태로 복구한다.
GRANT 데이터베이스 사용자에게 사용 권한을 부여한다.
REVOKE 데이터베이스 사용자의 사용 권한을 취소한다.

 

 

 

 

'DB' 카테고리의 다른 글

프로시저  (0) 2022.02.27
트랜잭션  (0) 2022.02.27
정규화  (0) 2022.02.27
데이터베이스 키의 개념과 종류  (0) 2022.02.27

+ Recent posts