chapter 2는 MySQL 설치법만 나와 있어서 공식문서만 봐도 충분하기에 다음 챕터를 정리하고자한다.
요구사항 분석과 시스템 설계 그리고 모델링
정보시스템 구축 절차 요약
정보시스템을 구축하기 위해서는 일반적으로 분석 -> 설계 -> 구현 -> 시험 -> 유지보수 의 단계를 거친다.
분석 단계는 시스템, 요구사항을 분석하며 우리가 무엇(what)을 할지 결정한다.
다음으로 설계 단계에서는 우리가 구축하고자 하는 시스템을 어떻게(how)할 것인지 결정한다.
이 과정이 시스템을 구축하는데 가장 중요하고 많은 시간이 쓰이는 부분이기도 하다.
너무 추상적이므로 다음의 도서관리 시스템 예시를 통해 이해해보자
분석 단계:
- 사용자는 웹사이트를 통해 도서를 검색하고 선택할 수 있어야 한다.
- 사용자는 선택한 도서를 장바구니에 추가할 수 있어야 한다.
- 사용자는 장바구니의 도서를 구매할 수 있어야 한다.
설계 단계:
1. 도서 검색 기능:
- 사용자가 검색어를 입력하면, 데이터베이스에 있는 도서 중 검색어와 일치하거나 관련 있는 도서를 반환한다.
- 도서 정보에는 제목, 저자, 가격, 썸네일 이미지 등의 필드가 포함된다.
- 검색 결과는 페이지네이션을 통해 나타나며, 한 페이지에는 최대 10권의 도서가 표시된다.
2. 장바구니 기능:
- 사용자는 도서 상세 페이지에서 "장바구니에 추가" 버튼을 클릭하여 도서를 장바구니에 추가할 수 있다.
- 장바구니 페이지에서는 사용자가 선택한 도서 목록, 총 가격, 도서 수량 조절 기능 등이 제공된다.
위의 예를 보면 알겠지만 분석과 설계 단계는 하나의 시스템을 만드는데 가장 기본이 되고 고민해야하는 작업이다.
데이터베이스 모델링과 필수 용어
분석 및 설계 과정에 '데이터베이스 모델링'이라는 과정이 포함되는데 현실세계에서 사용되는 데이터를 DB에 어떻게 옮겨 놓을 것인지를 결정하는 과정이다.
그림을 통해 이해하는 것이 더 쉬울 것이다.
위의 그림을 통해 용어를 정리해보자.
- 데이터: 당탕이, 컴퓨터와 같이 하나하나의 단편적인 정보를 뜻한다. 즉 정보는 있으나 체계화 되지 못한 상태
- 테이블: 회원이나 제품과 같이 데이터를 입력하기 위해 표 형태로 표현한 것을 말한다.
- 데이터베이스: 테이블이 저장되는 저장소를 말한다. 그림에는 총 3개(쇼핑몰, A, B)의 데이터베이스가 존재한다.
- DBMS: 데이터베이스를 관리하는 시스템(소프트웨어)를 말한다. 현재는 MySQL을 사용하니 MySQL이 DBMS라고 볼 수 있다.
- 열(컬럼, 필드): 각 테이블은 열로 구성된다. 회원 테이블을 예로 들면 아이디, 이름, 주소 총 3개의 컬럼이 있다. (열 이름은 중복되지 않아야 한다.)
- 데이터 형식: 열에 들어갈 데이터 형식을 말한다. 제품을 예로 들면 가격은 int형, 이름은 varchar, 제조일자는 dateTime이 데이터 형식이다.
- 행(로우): 실질적인 데이터를 말한다. 회원 테이블에서는 총 4개의 로우가 있다. (각 로우의 아이디는 겹쳐서는 안됨)
- 기본 키: 데이터를 식별할 유일한 값을 의미한다. id에 해당
- 외래 키: 두 테이블 간 관계를 맺어주는 키를 말한다. 예를 들어 제품을 만든 사람이 있고 이를 제품 테이블에 열로 추가해서 회원 id를 외래키로 둔다고 생각해보자. 그럼 그 제품을 만든 사람을 (select c.이름 from 회원 c join 제품 p on c.id = p.id;) 이런식으로 조인문을 통해 조회할 수 있다.
- SQL: 데이터베이스와 사용자간 소통을 하기 위한 언어이다.
테이블 외의 데이터베이스 개체의 활용
인덱스
지금은 간단히 설명하고 나중에 더 자세히 설명하겠다. 인덱스는 책의 앞부분에 있는 색인과 같은 역할을 한다. 예를 들어 위의 회원 테이블에 이름에 인덱스가 적용되어 있다면 이름이 당탕이인 데이터 위치에 인덱스를 통해 바로 접근이 가능하다.
뷰
가상의 테이블이라고 생각하면 되는데 특정 테이블에서 보고 싶은 데이터만 시각화해서 보여줄 수 있다.
그림으로 보면 다음과 같다.
근데 여기서 view 테이블에 쓰기 sql을 수행했을 때 실제 테이블에도 데이터가 삽입이 된다.(삭제, 업데이트도 마찬가지)
스토어드 프로시저
MySQL에서 제공해주는 프로그래밍 기능이다. 여러 쿼리를 묶어서 호출 가능하다.
delimiter
create procedure myProc()
begin
select * from member where memberName = '당탕이';
select * from product where productName = '냉장고';
end
delimiter;
call myProc()를 호출하면 begin부터 end가지의 쿼리가 수행된다.
트리거
데이터베이스에서 쓰기 작업이 일어날 때 발생하는 코드를 말한다.
예를 들어 회원 테이블에서 '당탕이'가 탈퇴해서 삭제한다면, 삭제한 로우가 무엇인지 알 수 없다. 이럴 때 트리거를 사용해서 삭제 쿼리가 발생했을 때 삭제된 로우를 삭제 테이블 같은 곳에 복사 가능하다.
create table deleteMember(
memberId char(8),
memberName char(5),
deletedDate date
);
delimiter
create trigger trg_deletemember
after delete
on member
for each row
begin
insert into deleteMember values (member.id, member.memberName, curdate());
end
delimiter;
'DB' 카테고리의 다른 글
MySQL 기본: SQL 기본 (0) | 2023.08.04 |
---|---|
MySQL 기본: 데이터베이스 모델링 (0) | 2023.08.03 |
MySQL 설치 및 DB 구축과정 미리 실습하기: DBMS 개요와 MySQL 소개 (0) | 2023.08.01 |
정규화 (0) | 2023.01.09 |
데이터베이스 인덱스 (0) | 2023.01.07 |