[DB/SQLD] 관계형데이터베이스, SQL

2 분 소요

데이터베이스와 데이터베이스 관리 시스템의 차이점

데이터베이스는 데이터를 어떠한 형태의 자료구조로 사용하느냐에 따라 나누어진다.

데이터베이스 종류는 계층형, 네트워크형, 관계형 데이터베이스 등이 있다.

계층형 데이터베이스는 트리 형태의 자료구조에 데이터를 저장하고 관리하며 1대N 관계를 표현한다.

네트워크는 오너와 멤버 형태로 데이터를 저장하고 1대N과 M대N표현도 가능하다.

데이터베이스 관리 시스템(Database Management System)은 계층형, 네트워크, 관계형 데이터베이스 등을 관리하기 위한 소프트웨어를 의미하며 DBMS라고 한다.

DBMS 종류에는 Oracle, MS-SQL, MySQL, Sybase 등이 있으며 모두 관계형 데이터베이스를 지원한다.



관계형 데이터베이스(Relation Database)

1970년대 E.F Codd박사의 논문에서 처음 소개된 데이터베이스.

릴레이션과 릴레이션의 조인연산을 통해 합집합, 교집합, 차집합 등을 만들 수 있다.

기업에서 가장많이 사용하는 Oracle, MS-SQL, MySQL, Sybase 등의 데이터베이스 관리 시스템이 있다.

관계형 데이터베이스는 릴레이션에 데이터를 저장하고 관리한다. 또 이 릴레이션을 사용해 집합연산과 관계연산을 할 수 있다.



관계형 데이터베이스 연산

집합연산

  1. 합집합(Union) : 두개의 릴레이션을 하나로 합치는 것. 중복된 행은 한번만 조회.
  2. 차집합(Difference) : 본래 릴레이션에는 존재하고 다른 릴레이션에는 존재하지 않는 것을 조회.
  3. 교집합(Intersection) : 두개의 릴레이션 간에 공통된 것 조회.
  4. 곱집합(Cartesian product) : 각 릴레이션에 존재하는 모든 데이터를 조합해 연산.

관계연산

  1. 선택연산(Selection) : 릴레이션에서 조건에 맞는 행만을 조회.
  2. 투영연산(Projection) : 릴레이션에서 조건에 맞는 속성만을 조회.
  3. 결합연산(Join) : 여러 릴레이션의 공통된 속성을 사용해 새로운 릴레이션을 만든다.
  4. 나누기연산(Division) : 기준 릴레이션에서 나누는 릴레이션이 가지고 있는 속성과 동일한 값을 가지는 행을 추출하고 나누는 릴레이션의 속성을 삭제한 후 중복된 행을 제거하는 연산.



테이블 구조

릴레이션은 최종적으로 데이터베이스 관리 시스템에서 테이블로 만들어진다.

  • 기본키는 하나의 테이블에서 유일성과 최소성, not null을 만족하면서 해당 테이블을 대표한다.
  • 테이블은 행과 칼럼으로 구성.
  • 행은 테이블에 저장되는 값으로 튜플이라고도 한다.
  • 칼럼은 어떤 데이터를 저장하기 위한 필드로 속성이라고도 한다.
  • 외래키는 다른 테이블의 기본키를 참조(조인)하는 칼럼으로 관계연산 중 결합연산을 하기 위해 사용.



SQL(Structured Query Language)

SQL은 관계형 데이터베이스에 대해서 데이터 구조를 정의, 데이터 조작, 데이터 제어 등을 하는 절차형언어이다.

관계형 데이터베이스는 데이터베이스를 연결하고 SQL문을 사용해 데이터베이스를 누구나 쉽게 사용할 수 있게 한다.

SQL은 ANSI/ISO 표준을 준수해 데이터베이스 관리 시스템이 변경되도 그대로 사용가능.

  • ANSI/ISO SQL 표준 : INNER JOIN, NATURAL JOIN, USING 조건, ON 조건절 사용
  • ANSI/ISO SQL3 표준 : DBMS 벤더별로 차이가 있던 SQL을 표준화하여 제정.



SQL 종류

종류 설명
DDL(Data Definition Language) 구조 정의. CREATE, ALTER, DROP, RENAME
DML(Data Manipulation Language) 데이터를 입력,수정,삭제,조회. INSERT, UPDATE, DELETE, SELECT
DCL(Data Control Language) 사용자에게 권한 부여, 회수. GRANT, REVOKE, TRUMCATE
TCL(Transaction Control Language) 트랜잭션을 제어. COMMIT, ROLLBACK, SAVEPOINT

작업순서를 보면 데이터베이스 사용자에게 권한을 부여하고 권한이 부여되면 DDL로 데이터 구조를 정의한다. 데이터 구조가 정의되면 데이터를 입력한 후 개발자 및 사용자가 그 데이터를 조회하는 것이다.



트랜잭션(Transaction)

트랜잭션은 데이터베이스의 작업을 처리하는 단위.

트랜잭션 특징

  1. 원자성(Atomicity) : 트랜잭션은 데이터베이스 연산의 전부가 실행되거나 전혀 실행되지 않아야 한다. (All OR NOTHING) 즉 트랜잭션의 처리가 완전히 끝나지 않았을 경우 실행되지 않은 상태와 같아야 한다.

  2. 일관성(Consistency) : 트랜잭션 실행결과로 데이터베이스의 상태가 모순되면 않된다. 트랜잭션 실행 후에도 일관성이 유지되어야 한다.

  3. 고립성(Ioslation) : 트랜잭션 실행 중 생성하는 연산의 중간결과는 다른 트랜잭션이 접근할 수 없다. 즉 부분적인 실행결과를 다른 트랜잭션이 볼 수 없다.

  4. 영속성(Durability) : 트랜잭션이 그 실행을 성공적으로 완료하면 그 결과는 영구적 보장이 되어야 한다.



SQL문의 실행순서

개발자가 작성한 SQL문은 3단계를 걸쳐 실행.

  1. 파싱(Parsing) : SQL문의 문법을 확인, 구문분석. 구문분석한 SQL문은 Library Cache에 저장.
  2. 실행(Execution) : 옵티마이저가 수립한 실행계획에 따라 SQL 실행
  3. 인출(Fetch) : 데이터를 읽어서 전송.