[SQL/2과목] 관계형 데이터베이스 개요
이제 2과목에 대한 포스팅을 시작해보겠다 !!

2과목의 첫 챕터는 관계형 데이터 베이스의 개요로 시작한다. 우린 지금까지 데이터베이스에 대해서 공부했는데, 그럼 관계형데이터베이스는 뭘까?
데이터베이스(Database)와 관계형데이터베이스(Relational Database)
데이터베이스(DB)는 체계적으로 구조화된 데이터의 집합이다. 단순하게 생각하면 계좌 거래내역, 책 목록 등도 데이터를 구조화한 것이기 때문에 데이터베이스이다!
관계형 데이터베이스(RDB)란, 데이터를 행과 열로 이루어진 테이블 형태로 저장하고 이 테이블들을 관계를 통해 데이터를 연결하고 관리하는 것이다! 우리가 현재 배우고 있는 이런 테이블, 관계 이런것들이 RDB인것이다! 관계형 데이터베이스는 릴레이션에 데이터를 저장하고 관리하며 집합 연산 및 관계 연산을 할 수 있다!
RDB와 RDBMS
백엔드를 조금이라도 해봤다면, RDB말고도 RDBMS를 많이 들어봤을 것이다.
그럼, RDBMS는 무엇일까?
RDBMS는 Relational Database Management System의 약자로 말그대로 RDB 관리 시스템이다. 관계형 데이터베이스를 만들고 수정하고 검색하는 소프트웨어이다!
예시로 MySQL, PostgreSQL, Oracle, Microsoft SQL Server(MSSQL) 이런 것들이 있다. SQL로 데이터로 다룬다!!
연산
위에서 관계형 데이터베이스는 집합 연산 및 관계 연산을 할 수 있다했는데, 연산에 대해서도 조금 정리해보겠다.
- 집합 연산
- 합집합: 두 관계의 합
- 교집합: 두 관계에 함께 존재하는 것
- 차집합: 한 관계에만 존재하며 다른 관계에는 존재하지 않는 것
- 곱집합: 각 관계에 존재하는 모든 데이터의 조합
- 관계연산
- 선택연산: 관계에서 특정 조건에 해당하는 행만 조회
- 투영연산: 관계에서 특정 조건에 맞는 속성만 조회
- 결합연산: 여러 관계에서 공통된 속성을 통해 새로운 관계 생성
- 나누기연산: 기준 관계에서 나누는 관계가 가지는 속성과 동일한 행만 추출하여 중복된 행 제거
자꾸 SQL, SQL거리는데 과연 SQL은 뭘까?
SQL
SQL은 Structured Query Language의 약자로, 관계형 데이터베이스에서 데이터 정의, 조작, 제어를 하기 위해 사용하는 언어이다.
이러한 SQL에는 종류가 있다.
| 명령어 종류 | 명령어 | 설명 |
| 데이터 조작어 (DML) |
SELECT | 데이터베이스에 들어있는 데이터를 조회하거나 검색하기 위한 명령어를 말하는 것으로, RETRIEVE라고도 한다. |
| INSERT UPDATE DELETE |
데이터베이스 테이블에 들어있는 데이터에 변형을 가하는 종류의 명령어들을 말한다. | |
| 데이터 정의어 (DDL) |
CREATE ALTER DROP RENAME |
테이블과 같은 데이터 구조를 정의하는 데 사용되는 명령어들로 그러한 구조를 생성하거나 변경하거나 삭제하거나 이름을 바꾸는 데이터 구조와 관련된 명령어들을 말한다. |
| 데이터 제어어 (DCL) |
GRANT REVOKE |
데이터베이스에 접근하고 객체들을 사용하도록 권한을 주고 회수하는 명령어를 말한다. |
| 트랜잭션 제어어 (TCL) |
COMMIT ROLLBACK |
논리적인 작업의 단위를 묶어서 DML에 의해 조작된 결과를 작업단위 별로 제어하는 명령어를 말한다. |
나는 이 종류들을 봤을때 데이터 관련 명령어 종류는 친숙했는데, 트랜잭션은 조금 와닿지 않았다. 그래서 트랜잭션에 대해서 정리해보겠다.
트랜잭션
트랜잭션은 데이터베이스의 작업을 처리하는 단위이다. 즉, 여러개의 SQL작업을 한 묶음으로 해서 처리하는 것이다. 한 묶음 단위로 관리하기에, 이 묶음이 어떻게 시행되냐에 따라 트랜잭션이 확정될수도있고, 취소될수도있다. 이 트랜잭션 단위로 성공하면 전부 반영(Commit), 실패하면 전부 취소(Rollback) 하는 것이다!
이 트랜잭션엔 특징이 있다.
1. 원자성(Atomicity)
- 트랜잭션 안의 모든 작업이 전부 수행하거나, 전혀 수행되지 않아야 한다
- ex) 은행으로 예시를 들면, A에서 B로 송금한다하면 A계좌에서 돈이 빠지고 B 계좌에 돈이 들어가는 작업이 둘 다 성공해야한다! 하나만 실행되면 안된다!
2. 일관성(Consistency)
- 트랜잭션 실행 전후에 데이터베이스의 일관성이 유지되어야 한다.
- ex) 은행 전체 합계가 항상 동일해야한다. 즉 A 계좌에서 B 계좌로 돈을 보내는 작업을 했다해서 A,B 계좌의 금액 합은 달라지면 안된다!
3. 격리성(Isolation)
- 동시에 여러 트랜잭션이 실행되더라도, 서로의 중간 결과를 볼 순 없다.
4. 지속성(Durability)
- 트랜잭션이 완료되면 그 결과는 영구적으로 저장되어야 한다.
- 전원이 꺼져도 결과는 유지되는 것이다!
SQL 실행 순서
SQL문은 3단계를 거처 실행된다.
- 파싱
- SQL문법을 확인하고 구문 분석을 한다
- 구문 분석한 SQL을 Library Cache에 저장한다.
- 실행
- 옵티마이저가 생성한 샐행 계획에 따라 SQL을 실행한다.
- 인출
- 데이터를 읽어 전송한다.
이번 포스팅에서는 2과목을 시작하며 간단히 개요정도 정리해보았다. 다음포스팅에서는 본격적으로 SELECT문과 내부 절들을 공부해보겠다!