본문 바로가기

CS ﹒ Algorithm/Database

데이터베이스 (1) 관계형 데이터베이스/SQL의 구성과 간단한 용어 정리

 

관계형 데이터베이스(relational database management system, RDBMS)

 

 

데이터베이스는 여러 사용자가 사용할 목적으로 체계화된 데이터의 집합이며, DBMS란 데이터베이스 관리 시스템이다.

현재 가장 많이 쓰이는 데이터베이스 관리 시스템은 관계형 데이터베이스 시스템(RDBMS)과 비-관계형 데이터베이스 관리 시스템인 NoSQL로 나뉜다.

그리고 이 글에서는 오직 관계형 데이터 베이스에 대해서만 짧게 기술하고 바로 SQL로 넘어간다.

 

 

 

 

참고로 서버리스의 강세에도 불구하고 여전히 RDBMS의 사용률이 압도적이며 이는 2015년 표와 비교해도 별반 차이가 없다. 

 

 

 

RDBMS에서 데이터는 여러개의 Table에 저장되는데, 이 Table은 한 개 이상의 column(열)로 구성된 집합이다.

그런데 처음 데이터베이스를 배우려고 하면 용어가 난잡해서 상당히 곤란하다.

분명히 아까 전까지 column과 row에 대해 이야기하다가 갑자기 튜플이 어쩌고 레코드가 어쩌고.. 그리고 저기서 배우려면 갑자기 엔티티가 어쩌고 이러고 있다.

굳이 따지자면 모두 사용처가 다른데 가르치는 사람들이나 쓰는 사람들이나 용어를 혼용하기 때문에 일단 모두 숙지하고 있어야 어려움이 없을 것이다.

 

 

파일 시스템
데이터베이스
모델링
관계형
데이터베이스
 
파일(File) 엔티티(Entity) 테이블(Table)  
레코드
(Record)
튜플
(Tuple)

(Row)
  1. 하나 이상의 컬럼이 배열 식으로 구성된 단위.
  2. 객체를 추상화하여 속성(Column)들이 정의되고 그 속성들을 모아놓은 집합이다.
  3. Like 객체의 인스턴스
  4. 각 레코드는 키 값에 의해 식별된다.
  5. 키는 여러 레코드 집합에서 고유하게 식별될 수 있는 컬럼으로 반드시 값이 존재해야하며 유일성을 가져야 한다. (Not NULL, Unique)
  6. 한 개의 레코드에 한 개의 키만 존재해야 하는 것은 아니다 ( 예 : 학교, 학년, 반, 번호 )
  7. 관계형 데이터베이스에서 레코드는 반드시 한 개 이상의 키를 갖는다. (key가 없다면 데이터베이스에서 특정 데이터를 식별할 방법이 없다)

(Key)
유일값
(Identifier)
기본키
(Primary Key)
 
필드
(Field)
속성
(Attribute)
컬럼
(Column)
  1. 특정 도메인 영역에 속하는 값(학년, 성별, 클래스, ... )
  2. 컬럼 명은 컬럼의 성격을 나타내기 때문에 의미있는 단어를 사용할 것.
  3. 데이터 타입 및 길이를 제한할 수 있음. (컬럼 성격에 맞게 적절히 제한해야함)
  4. 고유 식별자로 사용될 때는 key라고 부름.
  5. 값이 없으면 NULL이 되며 NULL을 가지고 있는 컬럼은 연산 또는 비교대상이 될 수 없다. (또한 NULL을 갖지 못하게 강제할 수 있다.)

 

 

 

 

 

 

 

SQL (Structured Query Language)

 

SQL은 한글로 구조적 질의어라는 의미를 가지고 있다.

관계형 데이터베이스에서 데이터를 효율적으로 관리하기 위해 설계된 프로그래밍 언어로써, RDBMS에서 자료의 검색과 관리, 데이터 베이스 스키마의 생성 및 수정, 데이터베이스 객체 접근 조정 관리 등의 역할을 수행한다.

많은 수의 데이터베이스 관련 프로그램들이 Ansi SQL이라는 표준을 채택하고 있으나 결국 깊이 들어가면 데이터베이스 프로그램 제조사마다 차이가 존재한다. (Oracle, MySQL, MS SQL, PostgreSQL 등 .. )

 

SQL에서 공통으로 통용되는 지시어의 종류는 다음과 같다.

 

 

종류 지시어  
DQL
(Data Query Language, 질의어)
SELECT SELECT * FROM student; => student의 모든 레코드를 반환하라
IF (id=3) SELECT;
DML
(Data Manlpulation Language, 조작어)
INSERT, UPDATE, DELETE INSERT INTO student (name) values ('만식'); => student column에 값 삽입.
UPDATE student SET name='웅이'; => 해당 column의 모든 값이 바뀜. WHERE id=3같은 방법으로 조건 지정
DELETE student => 마찬가지로 집합 명령이니 모두 삭제. DELETE student WHERE id=3
DDL
(Data Definition Language, 정의어)
CREATE, ALTER, DROP, RENAME, TRUNCATE 요즘은 직접 스크립트로 DDL을 사용하기보다 GUI 환경에서 편리하게 생성, 수정하는 경우가 많다.
라고 배웠는데 직접 사용해보니 GUI 환경에서 그렇게 스크립트를 잘 만들어주지 않는다. ( MySQL 기준, DBeaver 및 DataGript 모두 만족스럽지 못했음. )
MS SQL의 경우 정말 GUI에서 생성 수정은 그냥 다 끝낼 수 있다고 생각하면 되는데 My SQL이면 그냥 타이핑하자.
TCL
(Transaction Control Language, 트랜잭션 처리어)
COMMIT, ROLLBACK, SAVEPOINT 특정 SQL 구문의 실행 결과를 임시 보관한 뒤, 이것을 롤백하거나 실행처리 하는 것에 사용한다.
DCL
(Data COntrol Language, 데이터 제어어)
GRANT, REVOKE 데이터베이스에서의 작업 권한을 관리한다.

 

 

참고로 DML 중 UPDATE와 DELETE를 잘못 사용하면 인생 난이도를 하드 모드로 변경할 수 있다. 삶이 무료할 때 시도해볼 법하며, 그걸 원치 않는다면 검증 또 검증만이 살 길이다.