훈수/저작권 관련 지적 환영합니다 - 댓글 또는 audgnssweet@naver.com
DB (Database)
DB |
데이터베이스는 여러 사람이 공유하여 사용할 목적으로 체계화해 통합, 관리하는 데이터의 집합이다. -위키백과- |
우리는 RDB에 대해 알아보겠습니다.
RDB |
관계형 데이터베이스는 키와 값들의 간단한 관계를 테이블화 시킨 매우 간단한 원칙의 전산정보 데이터베이스이다. -위키백과- |
RDB는 간단히 말해서 데이터를 테이블 형식으로 저장하는 DB를 의미합니다.
Table |
관계형 데이터베이스에서 테이블은 세로줄과 가로줄의 모델을 이용하여 정렬된 데이터 집합의 모임이다. -위키백과- |
테이블은 동일한 구조(스키마 :링크)의 레코드(데이터 한 행)가 모인 집합입니다.
DB는 테이블들이 모인 것을 의미합니다.
DBMS (Database Management System)
DBMS |
데이터베이스 관리 시스템은 다수의 사용자들이 데이터베이스 내의 데이터를 접근할 수 있도록 해주는 소프트웨어 도구의 집합이다. -위키백과- |
DBMS는 간단히 말해서
사용자가 CRUD를 편리하게 할 수 있도록 해주는 시스템입니다.
그렇다면 RDBMS는 무엇일까요?
RDBMS |
사용자에게 데이터를 관계로서 표현한다. 즉, 행과 열의 집합으로 구성된 테이블의 묶음 형식으로 데이터를 제공한다. |
즉 RDBMS는 RDB를 관리해주는 시스템입니다.
특히 RDBMS는 Nosql 같은 것과는 다르게 검색에 최적화되어 있습니다.
쓰고, 업데이트하고, 지우는 것보다 찾는 것이 더 빠르다는 것입니다.
DML, DDL, DCL, DTL
DML (Data Manipulation Language) | 데이터베이스에 대해 데이터 검색, 등록, 삭제, 갱신을 위한, 데이터베이스 언어 또는 데이터베이스 언어 요소이다. -위키백과- 즉, 데이터 CRUD를 위한 SQL입니다. |
DDL (Data Definition Language) | 데이터를 정의하는 컴퓨터 언어 또는 컴퓨터 언어 요소이다. -위키백과- 즉, DB Schema를 다루기 위한 SQL입니다. |
DCL (Data Control Language) | 데이터에 대한 액세스를 제어하기 위한 데이터베이스 언어 또는 데이터베이스 언어 요소이다. 권한 부여와 박탈이 있다. -위키백과- 즉, 권한을 다루기 위한 SQL입니다. |
TCL (Transaction Control Language) | 트랜잭션을 다루기 위한 SQL입니다. |
모델링(Modeling)
데이터베이스 모델링 |
데이터 모델링이란 주어진 개념으로부터 논리적인 데이터 모델을 구성하는 작업을 말하며, 일반적으로 이를 물리적인 데이터베이스 모델로 환원하여 고객의 요구에 따라 특정 정보 시스템의 데이터베이스에 반영하는 작업을 포함한다. 후자의 의미로 흔히 데이터베이스 모델링으로 불리기도 한다. -위키백과- |
모델링은 간단히 말해서 요구사항에 맞게 테이블을 구성, 연관관계 구성을 하여
하나의 데이터베이스를 설계하는 것을 의미합니다.
이런 모델링에 사용되는 것이 ERD와 같은 것입니다.
모델링은 개념 모델링 / 논리 모델링 / 물리 모델링으로 나뉩니다.
나중에 배우고 정리해보도록 하겠습니다.
정규화
데이터베이스 정규화 |
관계형 데이터베이스의 설계에서 중복을 최소화하게 데이터를 구조화하는 프로세스를 정규화라고 한다. 데이터베이스 정규화의 목표는 이상이 있는 관계를 재구성하여 작고 잘 조직된 관계를 생성하는 것에 있다. -위키백과- |
데이터베이스 설계 시 중복을 최소화, 불필요한 데이터 삭제, 예외 없는 구성 등의 작업을 수행하는 것을 의미합니다.
설계 시 아무리 잘 짜였더라도 운용 중 요구사항의 변화 등으로 DB는 변화가 생길 수밖에 없습니다.
이런 정규화를 잘 알고 있다면 변화에 유연하게 대처할 수 있습니다.
이런 정규화의 종류에는
1 정규형, 2 정규형, 3 정규형 등이 있는데 공부해서 정리해보도록 하겠습니다.
그리고 데이터베이스를 정규화하게 된다면
보통 큰 테이블이 여러 개의 작은 테이블로 분할된다고 합니다.
인덱스(Index)와 검색
데이터베이스 인덱스 |
인덱스는 데이터베이스 분야에 있어서 테이블에 대한 동작의 속도를 높여주는 자료 구조를 일컫는다. 고속의 검색 동작뿐만 아니라 레코드 접근과 관련 효율적인 순서 매김 동작에 대한 기초를 제공한다. - 위키백과 - |
RDBMS는 검색에 최적화되어 있다고 말씀드렸었습니다.
이런 최적화를 위해 인덱스라는 개념을 사용합니다.
인덱스는 보통 B-Tree라는 자료구조와 결합되어 사용됩니다.
B Tree |
B-트리는 데이터베이스와 파일 시스템에서 널리 사용되는 트리 자료구조의 일종으로, 이진 트리를 확장해 하나의 노드가 가질 수 있는 자식 노드의 최대 숫자가 2보다 큰 트리 구조이다. - 위키백과 - |
즉, 이렇게 생긴 트리를 말하는 것입니다.
프로그래밍을 해보신 분들이라면 BST (이진 검색 트리)를 사용해 보신 적이 있을 것입니다.
B Tree는 이런 BST를 발전시킨 형태라고 할 수 있습니다.
위 트리에서는 어떤 인덱스를 찾더라도 3번 안에 찾을 수 있습니다. 참 빠르겠죠?
조인 (Join)
Join |
join 또는 결합 구문은 한 데이터베이스 내의 여러 테이블의 레코드를 조합하여 하나의 열로 표현한 것이다. 따라서 조인은 테이블로서 저장되거나, 그 자체로 이용할 수 있는 결과 셋을 만들어 낸다. - 위키백과 - |
간단히 말해서
여러 개의 테이블을 하나로 합쳐서 큰 테이블로 만드는 것을 의미합니다.
아니 정규화로 테이블 쪼갠다면서 왜 갑자기 합치냐?
한 개의 테이블로 합쳤을 때 원하는 데이터를 한 번에 가져오기 편하기 때문입니다.
조회에 중점을 둔다고 했었죠?
이런 Join은 테이블 대 테이블. 즉 테이블 단위로 진행이 됩니다.
또한 합치려면 공통 칼럼(외래 키)이 있어야 하는 제약 조건이 있습니다.
키
키는 DB에서 매우 중요한 개념입니다.
테이블의 레코드를 검색할 때 레코드를 특정(구별)할 수 있도록 해주는 기준입니다.
구별할 수 있게 해 준다는 것은, 유일해야 한다는 것이겠죠?
예를 들면 계정명이나 이메일과 같은 것들이 해당됩니다.
하나의 칼럼이 키가 될 수도 있지만, 여러 개의 칼럼이 묶여서 키가 될 수도 있습니다.
연산
연산의 종류는 여러 가지가 있습니다
1. Selection
조건에 맞는 레코드를 조회하는 것입니다.
ex) select * from student where 170 <tall and tall <180;
-> 키가 170보다 크고, 180보다 작은 학생들의 레코드(모든 칼럼)를 조회할 것이다.
2. Projection
특정한 칼럼만 조회하는 것입니다.
ex) select name, tall from student;
-> 학생들의 이름과 키만 조회할 것이다.
3. Union
이름 그대로 합집합. 여러 조회 결과를 합해서 볼 수 있습니다. (select * from student where tall < 173) union (select * from student where tall > 183);
-> 173보다 작은 학생들의 조회 결과와 183보다 큰 학생들의 조회 결과 레코드를 합해서 보겠다.
4. Difference
이름 그대로 차집합. A에는 속하나 B에는 속하지 않는 레코드만 조회합니다.
Oracle에서는 지원하나 Mysql에서는 지원하지 않습니다.
Mysql에서는 차집합을 구현하기 위해서 서브 쿼리 등을 이용해야 합니다.
//TODO: 예시 추가
5. Intersection
이름 그대로 교집합, A에도 속하고 B에도 속하는 레코드만 조회합니다.
Oracle에서는 지원하나 Mysql에서는 지원하지 않습니다.
Mysql에서는 교집합을 구현하기 위해서 서브 쿼리 등을 이용해야 합니다.
//TODO: 예시 추가
'데이터베이스' 카테고리의 다른 글
MySQL Join 기본 (0) | 2021.03.31 |
---|---|
MySQL 기본 명령어 (0) | 2021.03.31 |
(MySQL) Selection연산 기본과 Index Performance (0) | 2021.03.24 |
키, 외래 키, 참조 무결성 제약 조건 (0) | 2021.03.17 |
데이터의 종류 (0) | 2021.03.03 |