Don't Panic
in DB ☕ 4분 읽기

[DB] 데이터베이스 모델링 및 구축

#DB
목차

데이터베이스 모델링

데이터베이스 모델링은 테이블 구조를 미리 설계하는 개념으로, 건축 설계도를 그리는 과정과 비슷하다. 실제 세상에서 사용되는 사물이나 작업을 DBMS의 데이터베이스 개체로 옮기기 위한 과정이라 할 수 있다. 여기서 테이블은 실제 세상의 고객, 물건, 직원 등의 개체라고 생각하면 된다.

프로젝트 진행 시에는 대표적으로 폭포수 모델 을 사용하며, 데이터베이스 모델링은 폭포수 모델의 업무 분석시스템 설계 단계에 해당한다.

프로젝트 진행 단계

프로젝트 란 현실 세계에서 일어나는 업무를 컴퓨터 시스템으로 옮겨놓는 과정이다. 더 쉽게 말하면 대규모 소프트웨어를 작성하기 위한 전체 과정이다.

  1. 프로젝트 계획
  2. 업무 분석
  3. 시스템 설계
  4. 프로그램 구현
  5. 테스트
  6. 유지보수

데이터베이스 구성 요소 개념도

데이터베이스 기본 용어

  • 데이터: 하나의 단편적인 정보. 위 그림에서는 tess, 아이유 같은 개별적인 정보.
  • 테이블: 회원이나 제품의 데이터를 입력하기 위해 표 형태로 표현한 것. 그림에서는 회원·제품정보 테이블 2개가 있다.
  • 데이터베이스: 테이블이 저장되는 저장소. 데이터를 저장하는 곳이라는 의미로 그림에서는 원통 모양으로 표현한다. 그림에는 3개의 데이터베이스가 있으며, 각 데이터베이스는 이름이 서로 달라야 한다.
  • DBMS: 데이터베이스 관리 시스템(소프트웨어). MySQL이 DBMS이며, 그림에서 MySQL이 3개의 데이터베이스를 관리하고 있다.
  • 열(컬럼): 테이블의 세로 영역. 각 테이블은 여러 개의 열(컬럼, 필드)로 구성된다. 회원 테이블은 3개의 열, 제품 테이블은 5개의 열로 구성된다.
  • 열 이름: 각 열을 구분하기 위한 이름. 한 테이블 내에서는 서로 달라야 한다. 회원 테이블의 아이디, 회원 이름, 주소 등이 열 이름이다.
  • 데이터 형식: 열에 저장될 데이터의 형식. 회원 테이블의 회원 이름 열은 ‘1234’ 같은 숫자가 아니라 “나훈아” 같은 문자 형식이어야 하고, 제품 테이블의 가격 열은 숫자(정수) 형식이어야 한다. 데이터 형식은 테이블 생성 시 열 이름과 함께 지정한다.
  • 행(로우): 실질적인 진짜 데이터. 예를 들어 ‘test / 나훈아 / 경기 부천시 중동’이 하나의 행(로우, 레코드)이며 행 데이터라 부른다. 회원이 몇 명인지는 행 데이터의 개수로 알 수 있다. 즉 행의 개수가 데이터의 개수다.
  • 기본키(Primary Key, PK): 각 행을 구분하는 유일한 열. 네이버 회원 아이디, 학번, 주민번호 같은 것이다. 기본키는 중복되어서는 안 되며 비어 있어서도 안 된다.
  • SQL(Structured Query Language): DBMS에서 작업하려면 DBMS가 알아듣는 말로 해야 하는데, 그 언어가 바로 SQL이다.

데이터베이스 개체

테이블은 데이터베이스의 핵심 개체다. 하지만 테이블 외에 인덱스, 뷰, 스토어드 프로시저, 트리거, 함수, 커서 등의 개체도 필요하다.

인덱스

데이터를 조회할 때 테이블에 데이터가 적으면 결과가 금방 나오지만, 데이터가 많아지면 결과가 나오는 시간이 많이 소요된다. 인덱스는 이런 경우 결과가 나오는 시간을 대폭 줄여준다.

인덱스란 책의 제일 뒤에 수록되는 찾아보기와 비슷한 개념이다. 책에서 특정 단어를 찾을 때 처음부터 마지막까지 한 페이지씩 찾으면 상당히 오래 걸리므로 찾아보기(인덱스)로 찾는다. DBMS도 마찬가지다.


  • 뷰는 가상의 테이블이다.
  • 일반 사용자 입장에서는 테이블과 뷰를 구분할 수 없으며, 테이블과 동일하게 취급하면 된다.
  • 다만 뷰는 실제 데이터를 가지지 않으며, 진짜 테이블에 링크된 개념이라 할 수 있다.

뷰는 윈도우의 바로가기 아이콘과 비슷한 개념이다. 바로가기를 클릭해 실행하지만, 아이콘만 바탕화면에 있을 뿐 실제 실행 파일은 다른 폴더에 있다. 뷰의 실체는 select문이다.

뷰 개념 설명

create view member_view
as select* from member;


select * from member_view;

뷰 실행 결과

실행해 보면 테이블을 직접 실행한 것과 동일한 결과가 나온다.

테이블 대신 뷰를 쓰는 이유

  • 보안에 도움이 된다.
  • 긴 SQL문을 간략하게 만들 수 있다.

스토어드 프로시저

스토어드 프로시저를 통해 SQL문 안에서도 일반 프로그래밍 언어처럼 코딩이 가능하다. 비록 일반 프로그래밍보다 불편하지만 프로그래밍 로직을 작성할 수 있어 유용하게 사용한다.

스토어드 프로시저란 MySQL에서 제공하는 프로그래밍 기능으로, 여러 개의 SQL문을 하나로 묶어 편리하게 사용할 수 있다. SQL을 묶는 개념 이외에도 C, 자바, 파이썬 같은 프로그래밍 언어에서 사용되는 연산식, 조건문, 반복문 등을 사용할 수 있다.

스토어드 프로시저 개념 설명

예를 들어 다음 두 구문을 하나의 스토어드 프로시저로 만들 수 있다.

select * from member where member_name = "나훈아";
select * from product where product_name = "삼각김밥";

스토어드 프로시저 작성 규칙

  • 첫 행과 마지막 행에 구분 문자를 의미하는 DELIMITER // ~ DELIMITER ; 문을 사용한다. 이는 스토어드 프로시저를 묶어주는 약속이다.
  • BEGINEND 사이에 SQL문을 넣으면 된다.
DELIMITER //
CREATE PROCEDURE myProc() -- 스토어드 프로시저 이름 지정
BEGIN
	select * from member where member_name = "나훈아";
	select * from product where product_name = "삼각김밥";
END //
DELIMITER ;


CALL myProc(); --실행 call문

스토어드 프로시저 실행 결과


정리

  • 인덱스: 찾아보기와 비슷한 개념
  • : 바로가기 아이콘과 비슷한 개념 (가상의 테이블)
  • 스토어드 프로시저: 여러 개의 SQL을 묶어주거나 프로그래밍 기능을 제공

관련 중요 용어

한글 용어영문 용어설명
데이터베이스 개체Database Object테이블, 뷰, 인덱스, 스토어드 프로시저 등 데이터베이스 안에 저장되는 개체
실행 계획Execution PlanSQL 실행 시 인덱스 사용 여부를 알 수 있는 것
전체 테이블 검색Full Table Scan테이블의 모든 데이터를 훑어 원하는 데이터를 찾아내는 것. 책 전체를 찾아보는 것과 비슷함
인덱스 검색Index Scan인덱스를 통해 데이터를 찾는 것. 책 뒤의 찾아보기를 쓰는 것과 비슷함
구분 문자Delimiter스토어드 프로시저를 묶어주는 예약어
호출CALL스토어드 프로시저를 호출하는 예약어
개체 생성문Create데이터베이스 개체를 생성할 때 사용되는 예약어
개체 삭제문Drop데이터베이스 개체를 삭제할 때 사용되는 예약어