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

데이터 베이스 모델링

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

프로젝트 진행시엔 대표적으로 폭포수 모델 을 사용하며, 디비 모델링은 폭포수 모델의 업무분석과 시스템 설계단에 해당.

프로젝트 진행단계

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

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

20211203_175942

  • 데이터: 하나의 단편적인 정보. 위에선 tess,아이유 같은 개별적인 정보

  • 테이블: 회원이나 제품의 데이터를 입력하기 위해 표 형태로 표현한 것. 현재 회원, 제품정보 테이블 2개의 테이블은

  • 데이터베이스: 테이블이 저장되는 저장소. 데이터를 저장하는 곳이라는 ㅡ이미로 그림에서는 원통모양으로 표현. 그림에선 3개의 데이터베이스 표현. 각 데이터베이스는 이름이 서로 달라야 함.

  • DBMS: 데이터베이스 관리 시스템 또는 소프트웨어 MYSQL이 DBMS. 그림에서 MYSQL이 3개의 DBMS를 관리중

  • 열(컬럼): 테이블의 세로. 각 테이블은 여러개의 열(컬럼, 필드)로 구성. 회원 테이블은 3개의 열로 ,제품 테이블은 5개의 열로 구성됨.

  • 열 이름: 각 열을 구분하기 위한 이름. 열 이름은 각 테이블 내에선 서로 달라야 함. 회원 테이블의 아이디, 회원 이름 주소 등이 열 이름.

  • 데이터 형식: 열에 저장될 데이터의 형식, 회원테이블의 회원 이름 열은 ‘1234’와 같은 숫자가 아닌 “나훈아”와 같은 문자형식이여야 됨. 그리고 제품테이블의 가격 열은 숫자(정수)형식이어야 함. 데이터 형식은 테이블을 생성시 열 이름과 함께 지정해줌.

  • 행(로우): 실질적인 진짜 데이터. 예로 ‘test/나훈아/경기 부천시 중동’이 하나의 행(로우, 레코드)로 행 데이터라 부름. 회원 테이블에서 회원이 몇명인지는 행 데이터가 몇개인지로 알 수 있음. 행의 개수가 데이터의 개수.

  • 기본키(Primary Key,PK): 기본키 (또는 주 키) 열은 각 행을 구분하는 유일한 열. 더 쉽게 네이버 회원아이디, 학번, 주민번호와 같은 것. 그래서 기본키는 중복되선 안되며 비어있어서도 안된다. 이는 중복되지 않는다.

  • SQL(Structed Query Language): DBMS에서 작업하고 싶으면 DBMS가 알아듣는 말로 해야한다.

데이터베이스 개체

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

인덱스

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

인덱스란 책의 제일 뒤에 수록됟는 찾아보기와 비슷한 개념. 책의 내용 중 특정 단어를 찾고자 할 때 책의 처음부터 마지막까지 한 페이지씩 찾는건 상당히 오래 걸리므로 인덱스로 찾음. DBMS도 마찬가지.


  • 뷰는 가상의 테이블 이다. 일반 사용자의 입장에서는 테이블과 뷰를 구분할 수 없다. 일반 사용자는 테이블과 동일하게 뷰를 취급하면 된다.

다만 뷰는 실제 데이터를 가지지 않으며, 진짜 테이블에 링크된 개념이라 할 수 있다.

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

뷰의 실체는 select문이다.

20211203_192056

create view member_view
as select* from member;


select * from member_view;

20211203_193601

해보면 동일한 결과 나옴(테이블 실행한거랑)

그렇다면 테이블 대신 뷰를 쓰는 이유는 무엇인가?

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

스토어드 프로시저

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

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

20211203_194528

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

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

첫 행과 마지막 행에 구분문자라는 의미의 DELIMITER//~DELIMITER;문이 나왔다. 이건 스토어드 프로시저를 묶어주는 약속이다.

그리고 BEGIN과 END 사이에 SQL문을 넣으면 된다.

DELIMITER //
CREATE PROCEDURE myProc() -- 스토어드 프로시저 이름 지정
BEGIN
	select * from member where member_name = "나훈아";
	select * from product where product_name = "삼각김밥";
END //
DELIMITER ;


CALL myProc(); --실행 call문

20211203_195152


정리

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

관련 중요 용어

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






© 2021.03. by yacho

Powered by github