본문으로 바로가기

8장. 웹 데이터베이스 디자인하기 (p.265)


학습 목표

- 관계형 데이터베이스의 개념과 용어

- 웹 데이터베이스의 디자인

- 웹 데이터베이스의 구조


1. 관계형 데이터 베이스의 개념


1) 관계형 데이터 베이스 (relational database)

- 일반적으로 사용되는 종류

- 관계형 대수(relational algebra)에 이론적인 기반을 두고있다.


1-1) 테이블

- 관계형 데이터베이스는 쉽게 말해 테이블로 이뤄짐

- 테이블 : 데이터들로 이루어진 표, 테이블에는 이름과 데이터의 종류에 해당하는 여러개의 열과 행이 구성되어 있음


1-2) 열

- 테이블에서 각각의 열은 유일한 이름을 가지고있고, 서로 다른 데이터들이 들어있다

- 각 열에는 그에 해당하는 데이터 형(data type)이 있다

ex. customers 테이블에 customerID라는 열은 정수(integer)형이고 name과 address와 city는 문자열(string)이다.

- 열은 필드(field)나 속성(attribute)라고도 함


1-3) 행

- 행은 테이블 형식이기 떄문에 행들끼리는 같은 속성을 가진다

- 행은 레코드(record)나 튜플(tuple)이라고 함


1-4) 값

- 각 행은 열에 대응하는 값들을 가지고 있으며 열의 속성에 어긋나지 않는 데이터 형이어야 함


1-5) 키

- 각각의 데이터 값을 구분, 식별하는 방법이 필요하지만 중복 가능성이 많게 구분하는 것은 좋은 방법이 이니다. 

- 따라서, 테이블에서 유일하면서 식별의 기준이 되는 열을 키(key)또는 기본키(primary key)라고 함

- 데이터 베이스는 보통 여러 개의 테이블로 구성되어있고 한 테이블에서 다른 테이블을 참고할 때 키를 사용

- 다음 예를 참고하자

ex. customers 테이블에 기본키가 customerid일때, orders 테이블에서는 외래키가 된다.


1-6) 스키마

- 왜 위의 예시처럼 customers와 order라는 테이블을 나눌까?

- 스키마 : 데이터베이스에서 테이블 디자인을 스키마(schema)라고 함

- 스키마는 그 테이블의 열에 대한 항목과 열의 데이터 형, 그 테이블의 기본키와 외래키를 나타내고있어야 한다.

   (스키마 자체에서는 실제 데이터가 들어가는 것이 아님)

- 스키마는 개체-관계 다이어그램(entity-relationship diagram)을 통해 도표로 표현되거나 다음과 같은 텍스트로 표현될수 있다

ex. cutomers(customerid, name, address, city)

     orders(orderid, cutomerid, amount, date)                   ===> 밑줄 친 것이 기본키, 기울기있는 텍스트는 외래 키 이다.


1-7) 관계

- 외래 키는 두 테이블 간의 데이터 관계(realtionship)을 나타냄

ex. customers 테이블과 orders 테이블의 연결읜 cutomers 테이브르이 한 줄과 orders 테이블의 한줄 사이의 관계를 나타냄

- 관계 데이터베이스에는 세가지 기본적인 관계가 있음

   : 일대일 (one to one)

     ex. 만약 addresses라는 항목을 customers 테이블에서 분리해서 따로 만들었을 경우 일대일 관계 (고객 하나에 주소 하나를 대응)

   : 일대다 (ont to many)

     한 테이블의 한 행은 다른 테이블의 여러행과 연결

     ex. 한 고객이 주문을 여러 개 할 수 있는 것. customerid를 orders 테이블에 넣어 둘간의 관계를 나타낼때

   : 다대다 (many to many)

     한 테이브르이 여러행이 다른 테이블의 여러행과 연결

     ex. books와 authors라는 두 테이블이 있다면, 한 책을 여러 작가가 공동 집필할 수 있고, 한 작가가 여러 책을 쓸수도 있다


2. 웹 데이터베이스의 디자인


1) 모델링할 실생활에 대해 생각해 보자

- 실생화의 아이템들과 그들의 관계, 그리고 여기에 저장되는 정보들을 그대로 모델링한다.

- 일정한 형태가 있다면 데이터를 저장하는 테이블을 디자인하기 수월.


2) 중복된 데이터가 저장되는 것을 피하자

- 저장 공간을 낭비하거나 (한번만 저장해되 되는것을 여러번 반복 저장 X) 잘못된 업데이트가 일어나지 않도록 한다.

  : 여기서 잘못된 업데이트(update anomalies)란 ? 내용을 변결하다가 불완전하게 끝났을 경우 데이터의 완전성이 보장 되지 않고, 어떤

    데이터가 옭고 그른지 구분할 수없데 되어 데이터가 손실되는 경우. 변경, 삽입, 삭제의 세가지 잘못된 업데이트를 막아야함.

ex. 잘못된 변경(modification anomaly)

     만약 테이블이 다음과 같이 구성되어있고,


orderid

date

customerid

name

address

 12

 2013-03-19

 1

 세희

 경기도 수원

 13

 2013-03-20

 1

 세희

 경기도 수원


     세희가 이사를 해서 orderid가 13번인 테이블의 address를 수정했다면, 정보가 뒤죽박죽이 되어 잘못된 변경이 발생

ex. 잘못된 삽입(insertion anomaly)

     위의 테이블에서는 세희가 경기도 수원에 살고 있다고 되어있지만 어느 행에 세희가 서울시 송파에 산다고 새로 입력하면

     저장된 내용이 앞뒤가 맞지 않아 문제점 발생

ex. 잘못된 삭제(delete anomaly)

     주문이 제대로 발송되었음을 확인 한 뒤 이 주문에 대한 데이터베이스가 지워지게 되어있어 주문 발송 확인 메일을 발송후

     세희에 대한 정보는 (주소 정보까지) 지워진다면 정작 우편물을 보낼 때 주소가 없어 문제점 발생

- 따라서, 이러한 문제점이 없도록 디자인하는 것이 중요


3) 하나의 항목에는 하나의 데이터만 저장되도록 하자

- 테이블 한 칸에는 오직 하나만 저장되도록 디자인


4) 알아보기 쉬운 키를 사용하자

ex. cutomers 테이블에서는 customerid, orders테이블에서는 orderid라 사용해 각 테이블의 id임을 쉽게 알아보도록 사용 (중복도 안됨)


5)  데이터베이스에 물어볼 질문에 대해 생각해보자


6) 내용이 빈 항목들이 많지 않도록 디자인 하자

- 저장공간이 낭비 될 뿐만 아니라 총 합을 구한다든지 등의 작업에서 문제를 일으킬수 있다.

- 또는 사용자가 널(nul)값을 보면 이것이 오류인지, 자료가 없는 건지, 틀린 건지 알 수 가 없다.


7) 테이블 총 정리

- 데이터베이스를 디자인 할 때, 테이블을 두 종류로 구분

  : 실생활에서 객체들을 그대로 나타내는 간단한 테이블로, 일대일 관계나 일대다 관계가 있다.

  : 다대다 관계를 나태는 연결(linkin)테이블은 실생활에서 트랜잭션을 나타낸다.


3. 웹 데이터베이스의 구조


1) 웹서버 기본 동작

- 웹 브라우저와 웹 서버라는 두가지 요소로 구성. 이 둘사이에는 통신을 할 수 있는 연결이 필요

- 웹브라우저는 서버에 요청을 보내고 서브는 이를 받아 응답을 전송

- 이러한 구조는 주로 정적인(static) 웹 페이즈를 주고받는데 적합


2) 일반적인 웹 데이터 베이스 구조

2-1) 사용자의 웹 브라우저가 특정 웹페이지에서 HTTP 요청을보냄

ex. 어떤 사람이 온라인 서점에서 세희가 집필한 책을 검색하여 나온 결과를 result.php라고 함. 웹 브라우저는 서버에게 result.php를 보내달라고 요청을 전송

2-2) 웹 서버는 이 요청을 받고서 이를 처리하기 위해 PHP 엔진에 넘김

2-3) PHP 엔진은 이 스크립트를 파싱. 스크립트 안에 있는 데이터베이스에 접속해서 쿼리를 수행하라는 명령을 PHP는 MySQL서버에 연결해서 이 쿼리를 MySQL로 보냄. 

2-4) MySQL 서버는 이 쿼리를 받아 처리하고 결과를 PHP 엔진에게 돌려줌

2-5) PHP 엔진은 결과를 HTML 형식에 맞게 바꾼 후 웹 서버에 전달

2-6) 웹 서버는 이 결과를 브라우저에 전달하고 사용자는 검색 결과를 볼 수 있음