모의 데이터베이스 시스템 구현 – 인터넷 웹 서점 교과목 데이터베이스 및 설계 보고서명 완료보고서 책 임 자 (팀장) 성 명 소 속 컴퓨터 공학 학 번 학 년 3학년 휴 대 폰 이 메 일 과제 명 모의 데이터베이스 시스템 구현 – 인터넷 웹 서점 개발기간 참여학생 학번 이름 전공 담당 20060446 노진웅 조장 20060710 성윤영 개정이력 날 짜 개정 요약 2010.04.07 DB 발표 주제 선정 모임 2010.05.11 DB 발표 화면 설계 모임 2010.05.26 ERD작성 및 화면설계 2010.06.10 ERD 수정 및 화면설계 2010.06.14 화면설계 및 ERD 수정 및 구현 수정 2010.06.19 구현 범위 조정 및 화면설계 및 ERD, DDL, DML작성. 프로젝트 완료 과제 진척 개요 진척 사항: 주제 선정 과제 범위 선정 yes24 분석 / 화면 설계 E-R Diagram 명확 기능 VS 개체 분명 개선 사항 E-R Diagram 편집 기능 표 작성 기능 추가 관계데이터 모델 BCNF 정규화
목차 주제선정 3. 관계형 데이터 모델링 2. 화면설계 1) 회원 모드 4. DDL 1) 카테고리 1) ERD 1) 과제 개요 2) workbench ERD 3) 관계형데이터모델(카테고리) 4) 관계형데이터모델(도서) 5) 관계형데이터모델(회원) 6) 관계형데이터모델(주문) 7) 관계형데이터모델(환불) 주제선정 1) 과제 개요 2) 선정 이유 3) 과제 범위 4) 기능별 화면 구성 2. 화면설계 1) 회원 모드 2) 관리자 모드 4. DDL 1) 카테고리 2) 도서 3) 회원 4) 주문 5) 환불
2. 과제 개요 www.Yes24.com 사이트에 있는 국내도서를 기준으로 회원가입, 마일리지 관리, 주문/환불 기능 조회 기능과 관리자모드의 회원 정보관리, 도서관리, 매출/판매, 재고관리 등을 작성할 것 입니다.
3. 선정 이유 저희 공대생들은 논리적이고 체계적이지만 감성이나 책과 거리가 멀다고 생각 합니다. 책은 항상 우리 주변에 있고 오프라인 매장을 가지 않아도 인터넷을 통해 책에 관한 정보를 얻을 수 있습니다. 책 DB를 통해 웹 서점의 운영방식과 책의 정보를 얻을 수 있는 계기로 삼고자 합니다.
4. 과제 범위 사용자 기능명 설명 회원 .회원 가입 회원 가입 정보 입력 주문 관리 도서 주문 조회 환불 관리 도서 환불 조회 마일리지 관리 도서 마일리지 관리 관리자 회원 관리 서점 내 회원 정보 조회/수정/삭제 도서 기본 정보 ISBN, 지은이, 판매 가격, 입고 가격, 보유 수량, 마일리지 카테고리 관리 도서의 카테고리 관리 매출 관리 회원간 도서 판매 관리 회원 도서 환불 관리 재고 관리
5. 기능별 화면구성 회원가입
회원정보관리 ID 비밀번호 이름 주민번호 주소 전화번호
도서관리
매출 관리 판매번호 판매날짜 도서ID 회원ID 판매수량
환불관리 환불번호 도서ID 회원ID 환불날짜 구매수량
재고 관리 날짜 도서ID 재고수량
침대와 책 정혜윤 지음 푸른숲 12000
국내도서 > 문학 침대와 책 도서번호 1 정혜윤 푸른숲 판매가 12000 ISBN 8901072629 주문수량 1 주문하기
회원번호 1 회원ID kumoh 이름 금오 비밀번호 ● ● ● ● 전화번호 111-1111 주소 구미시 양호동 1번지 원본 데이터 입력 입력
조회 주문번호 12 주문 번호 12 주문 날짜 2010-06-14 도서 ID 1 주문 내역 침대와 책 주문 수량 1 주문 금액 12000 마일리지 120 확인
조회 주문번호 12 환불 번호 14 환불 날짜 2010-06-16 도서 ID 1 주문 내역 침대와 책 환불 수량 -1 환불 금액 -12000 마일리지 -120 환불신청
마일리지 DML 날짜 주문 번호 마일리지 날짜 환불번호 마일리지 2010-06-14 12 120 2010-06-16 14 -120 마일리지 DML
kumoh 조회 회원ID 회원ID kumoh 1 회원번호 금오 이름 비밀번호 ● ● ● ● 전화번호 010-111-1110 주소 구미시 양호동 1번지 수정 DML 수정 입력 삭제
조회 회원ID toto 회원ID 회원번호 2 이름 토마 비밀번호 ● ● ● ● 전화번호 010-222-2222 주소 구미시 옥계동 입력 DML 수정 입력 삭제
toto 조회 회원ID toto 회원ID 이름 토마 비밀번호 ● ● ● ● 전화번호 010-222-222 주소 구미시 옥계동 삭제 DML 수정 입력 삭제
1 조회 도서ID 도서ID 1 책이름 침대와 책 ; 지상에서 가장 관능적인 독서기 지은이 정혜윤 재고량 100 출판사 푸른숲 카테고리 번호 100 ISBN 8901072629 수정 DML 수정 입력 삭제
조회 도서ID 도서ID 2 책이름 불멸1 재고량 100 지은이 이문열 카테고리 번호 100 출판사 민음사 ISBN 8937482967 입력 DML 수정 입력 삭제
조회 도서ID 2 도서ID 2 책이름 불멸1 재고량 100 지은이 이문열 카테고리 번호 100 출판사 민음사 ISBN 8937482967 삭제 DML 수정 입력 삭제
조회 판매 날짜 2010-06-14 판매 날짜 도서 ID 판매 번호 수량 판매금액 2010-06-14 1 12 1 12000
조회 환불 날짜 2010-06-16 환불 날짜 도서 ID 환불 내역 환불 번호 수량 금액 2010-06-14 1 침대와 책 14 1 -12,000 -12,000
조회 카테고리 번호 200 카테고리 번호 카테고리 명 100 문학 200 국어/외국어 원본 데이터 입력 수정 DML 수정 입력 삭제
조회 카테고리 번호 카테고리 번호 카테고리 명 100 문학 200 국어/외국어 300 잡지 입력 DML 수정 입력 삭제
조회 카테고리 번호 300 카테고리 번호 카테고리 명 100 문학 200 국어/외국어 삭제 DML 수정 입력 삭제
도서ID 도서명 재고수량 1 침대와 책 ; 지상에서 가장 관능적인 독서기 : 99 2 불멸 1 100 재고 DML
ERD 주문 m:n 도서 회원 1:0..n 1:n 환불 분류 카테고리 주문번호 주문수량 주문날짜 회원ID 도서ID 주문가격 전화번호 마일리지 ISBN 주문 m:n 비밀번호 도서 회원 도서명 이름 작가 주소 1:0..n 출판사 1:n 주민등록번호 환불 재고수량 분류 전화번호 환불가격 마일리지 환불번호 환불수량 환불날짜 카테고리 카테고리번호 카테고리명
Entity-Relationship diagram
관계형 데이터 모델(카테고리) 릴레이션 속성 타입 카테고리 (Category) 카테고리번호(cNum) INT 카테고리명(cName) VARCHAR(13) DDL BCNF 정규형 만족함
관계형 데이터 모델(도서) 릴레이션 속성 타입 도서 (book) 도서번호(bID) INT ISBN(bISBN) VARCHAR(10) 도서명(bName) VARCHAR(45) 작가(bAuthor) 출판사(bPublisher) 재고량(bStock) 카테고리번호(cNum) DDL BCNF 정규형 만족함
관계형 데이터 모델(회원) 릴레이션 속성 타입 회원 (member) 회원번호(mNum) INT 회원ID(mID) VARCHAR(45) 비밀번호(mPassword) VARCHAR(10) 이름(mName) VARCHAR(40) 주소(mAddr) 전화번호(mTel) BCNF 정규형 만족함 DDL
관계형 데이터 모델(주문) 릴레이션 속성 타입 주문 (request) 주문번호(reNum) INT 주문날짜(reDate) 주문수량(reAmount) 주문가격(rePrice) 마일리지(reMileage) 회원번호(mNum) 도서번호(bNum) 환불번호(rNum) BCNF 정규형 만족함 DDL
관계형 데이터 모델(환불) 릴레이션 속성 타입 주문 (request) 환불번호(rNum) INT 환불날짜(rDate) DATE 환불수량(rAmount) 환불가격(rPrice) 마일리지(rMileage) 회원번호(mNum) BCNF 정규형 만족함 DDL
카테고리 모델 DDL -- --------------------------------------- -- Table `category` DROP TABLE IF EXISTS `category` ; CREATE TABLE IF NOT EXISTS `category` ( `cNum` INT NOT NULL , `cName` VARCHAR(10) NULL , PRIMARY KEY (`cNum`) ) ENGINE = InnoDB;
도서 모델 DDL -- ----------------------------------------------------- -- Table `book` DROP TABLE IF EXISTS `book` ; CREATE TABLE IF NOT EXISTS `book` ( `bID` INT NOT NULL , `bISBN` VARCHAR(10) NULL , `bName` VARCHAR(45) NULL , `bAuthor` VARCHAR(45) NULL , `bPublisher` VARCHAR(45) NULL , `bStock` INT NULL , `cNum` INT NOT NULL , PRIMARY KEY (`bID`) , INDEX `fk_book_category` (`cNum` ASC) , CONSTRAINT `fk_book_category` FOREIGN KEY (`cNum` ) REFERENCES `category` (`cNum` ) ON DELETE NO ACTION ON UPDATE NO ACTION) ENGINE = InnoDB;
회원 모델 DDL -- ----------------------------------------------------- -- Table `member` DROP TABLE IF EXISTS `member` ; CREATE TABLE IF NOT EXISTS `member` ( `mNum` INT NOT NULL , `mID` VARCHAR(45) NULL , `mPassword` VARCHAR(10) NULL , `mName` VARCHAR(40) NULL , `mAddr` VARCHAR(45) NULL , `mTel` VARCHAR(40) NULL , PRIMARY KEY (`mNum`) ) ENGINE = InnoDB;
주문 모델 DDL -- ----------------------------------------------------- -- Table `request` DROP TABLE IF EXISTS `request` ; CREATE TABLE IF NOT EXISTS `request` ( `reNum` INT NOT NULL , `reDate` DATE NULL , `reAmount` INT NULL , `reMileage` INT NULL , `bID` INT NOT NULL , `mNum` INT NOT NULL , `rNum` INT NULL , PRIMARY KEY (`reNum`) , INDEX `fk_request_book` (`bID` ASC) , INDEX `fk_request_member` (`mNum` ASC) , INDEX `fk_request_refund` (`rNum` ASC) , CONSTRAINT `fk_request_book` FOREIGN KEY (`bID` ) REFERENCES `book` (`bID` ) ON DELETE NO ACTION ON UPDATE NO ACTION, CONSTRAINT `fk_request_member` FOREIGN KEY (`mNum` ) REFERENCES `member` (`mNum` ) CONSTRAINT `fk_request_refund` FOREIGN KEY (`rNum` ) REFERENCES `refund` (`rNum` ) ON UPDATE NO ACTION) ENGINE = InnoDB;
환불 모델 DDL -- ----------------------------------------------------- -- Table `mydb`.`refund` DROP TABLE IF EXISTS `mydb`.`refund` ; CREATE TABLE IF NOT EXISTS `mydb`.`refund` ( `rNum` INT NOT NULL , `rDate` DATE NULL , `rAmount` INT NULL , `rMileage` INT NULL , `rPrice` INT NULL , PRIMARY KEY (`rNum`) ) ENGINE = InnoDB;
회원가입 mysql> delete from member; Query OK, 0 rows affected (0.00 sec) mysql> insert into member(mNum,mID,mPassword,mName,mAddr,mtel)values -> (1,'kumoh','1111','금오','구미시 양호동 1번지','010-111-1111'); Query OK, 1 row affected (0.09 sec) mysql> select *from member; +------+-------+-----------+-------+---------------------+--------------+ | mNum | mID | mPassword | mName | mAddr | mTel | | 1 | kumoh | 1111 | 금오 | 구미시 양호동 1번지 | 010-111-1111 | 1 row in set (0.00 sec)
주문 번호 12번 조회 mysql> select * from request where reNum=12; +-------+------------+----------+-----------+---------+-----+------+------+ | reNum | reDate | reAmount | reMileage | rePrice | bID | mNum | rNum | | 12 | 2010-06-14 | 1 | 120 | 12000 | 1 | 1 | NULL | 1 row in set (0.00 sec) 주문 하기 mysql> insert into request(reNum,reDate,reAmount,reMileage,rePrice,bID,mNum,rNum) values (12,'2010=06-14',1,120,12000,1,1,null); Query OK, 1 row affected (0.09 sec) mysql> select *from request;
환불 하기 환불 화면 1:0관계이므로 주문에 rNum=14를 등록 mysql> update request set rNum=14; Query OK, 1 row affected (0.03 sec) Rows matched: 1 Changed: 1 Warnings: 0 mysql> insert into refund(rNum,rDate,rAmount,rMileage,rPrice) values -> (14,'2010-06-16',-1,-120,-12000); Query OK, 1 row affected (2.47 sec) mysql> select *from refund; +------+------------+---------+----------+--------+ | rNum | rDate | rAmount | rMileage | rPrice | | 14 | 2010-06-16 | -1 | -120 | -12000 | 1 row in set (0.00 sec) 환불 화면 mysql> select r.rNum, r.rDate, b.bID, b.bName,r.rAmount,r.rPrice,r.rMileage -> from refund r, book b where rNum=14; +------+------------+-----+------------------------------------------+---------+--------+----------+ | rNum | rDate | bID | bName | rAmount | rPrice | rMileage | | 14 | 2010-06-16 | 1 | 침대와 책 :지상에서 가장 관능적인 독서기 | -1 | -12000 | -120 |
마일리지 mysql> select re.reDate, re.reNum, re.reMileage, r.rDate, r.rNum, rMileage from request re, refund r, book b, member m where m.mNum=1; +------------+-------+-----------+------------+------+----------+ | reDate | reNum | reMileage | rDate | rNum | rMileage | | 2010-06-14 | 12 | 120 | 2010-06-16 | 14 | -120 | 1 rows in set (0.00 sec)
회원 ‘kumoh’ 조회 회원 ‘kumoh’ 번호 수정 mysql> select* from member where mID='kumoh'; +------+-------+-----------+-------+---------------------+-----------------+ | mNum | mID | mPassword | mName | mAddr | mTel | | 1 | kumoh | 1111 | 금오 | 구미시 양호동 1번지 | 010-111-1111 | 1 row in set (0.00 sec) 회원 ‘kumoh’ 번호 수정 mysql> update member set mTel='010-111-1110'; Query OK, 1 row affected (2.47 sec) Rows matched: 1 Changed: 1 Warnings: 0 mysql> select *from member where mID='kumoh'; +------+-------+-----------+-------+---------------------+------------------+ mNum | mID | mPassword | mName | mAddr | mTel | | 1 | kumoh | 1111 | 금오 | 구미시 양호동 1번지 | 010-111-1110 |
회원 입력 mysql> insert into member(mNum, mID, mPassword,mName,mAddr,mTel) values -> (2,'toto','2222','토마','구미시 옥계동','010-222-2222'); Query OK, 1 row affected (0.03 sec) mysql> select *from member; +------+-------+-----------+-------+---------------------+--------------+ | mNum | mID | mPassword | mName | mAddr | mTel | | 1 | kumoh | 1111 | 금오 | 구미시 양호동 1번지 | 010-111-1110 | | 2 | toto | 2222 | 토마 | 구미시 옥계동 | 010-222-2222 | 2 rows in set (0.00 sec)
회원 ‘toto’조회 회원 ‘toto’삭제 mysql> select *from member where mID='toto'; +------+------+-----------+-------+---------------+--------------+ | mNum | mID | mPassword | mName | mAddr | mTel | | 2 | toto | 2222 | 토마 | 구미시 옥계동 | 010-222-2222 | 1 row in set (0.00 sec) 회원 ‘toto’삭제 mysql> delete from member where mID='toto'; Query OK, 1 row affected (0.05 sec) mysql> select *from member; +------+-------+-----------+-------+---------------------+--------------+ | mNum | mID | mPassword | mName | mAddr | mTel | | 1 | kumoh | 1111 | 금오 | 구미시 양호동 1번지 | 010-111-1111 |
도서 입력 mysql> insert into book(bID, bISBN,bName,bAuthor,bPublisher,bStock,cNum) values -> (1,'8901072629','침대와책','정혜윤','웅진지식하우스',100,100); Query OK, 1 row affected (2.45 sec) mysql> select *from book; +-----+------------+----------+---------+----------------+--------+------+ | bID | bISBN | bName | bAuthor | bPublisher | bStock | cNum | | 1 | 8901072629 | 침대와책 | 정혜윤 | 웅진지식하우스 | 100 | 100 |
도서 bID =1번 조회 mysql> select *from book where bID=1; +-----+------------+------------------------------------------+---------+----------------+--------+------+ | bID | bISBN | bName | bAuthor | bPublisher | bStock | cNum | | 1 | 8901072629 | 침대와 책 | 정혜윤 | 웅진지식하우스 | 100 | 100 | 1 row in set (0.00 sec) 도서 수정 mysql> update book set bName='침대와 책 :지상에서 가장 관능적인 독서기'; Query OK, 1 row affected (1.14 sec) Rows matched: 1 Changed: 1 Warnings: 0 mysql> select *from book; +-----+------------+------------------------------------------+---------+----------------+ | bID | bISBN | bName | bAuthor | bPublisher | bPrice | cNum | | 1 | 8901072629 | 침대와 책 :지상에서 가장 관능적인 독서기 | 정혜윤 | 웅진지식하우스 | 100 | 100 | +-----+------------+------------------------------------------+----------+--------+------+
도서 입력 mysql> insert into book(bID, bISBN,bName,bAuthor,bPublisher,bStock,cNum) values -> (2, '8937482967 ','불멸1','이문열','민음사',99,100); Query OK, 1 row affected, 1 warning (0.05 sec) mysql> select *from book; +-----+------------+------------------------------------------+---------+----------------+--------+------+ | bID | bISBN | bName | bAuthor | bPublisher | bStock | cNum | | 1 | 8901072629 | 침대와 책 :지상에서 가장 관능적인 독서기 | 정혜윤 | 웅진지식하우스 | 100 | 100| | 2 | 8937482967 | 불멸1 | 이문열 | 민음사 | 99 | 100 | 2 rows in set (0.00 sec)
도서 bID 2번 조회 mysql> select *from book where bID=2; +-----+------------+-------+---------+------------+--------+------+ | bID | bISBN | bName | bAuthor | bPublisher | bStock | cNum | | 2 | 8937482967 | 불멸1 | 이문열 | 민음사 | 99 | 100 | 1 row in set (0.00 sec) 도서 삭제 mysql> delete from book where bID=2; Query OK, 1 row affected (0.92 sec) mysql> select *from book; +-----+------------+------------------------------------------+---------+----------------+--------+------+ | bID | bISBN | bName | bAuthor | bPublisher | bStock | cNum |+-----+------------+------------------------------------------+---------+----------------+--------+------+ | 1 | 8901072629 | 침대와 책 :지상에서 가장 관능적인 독서기 | 정혜윤 | 웅진지식하우스 | 100 | 100 |
매출 조회 mysql> select *from request where reDate='2010-06-14'; +-------+------------+----------+-----------+---------+-----+------+------+ | reNum | reDate | reAmount | reMileage | rePrice | bID | mNum | rNum | | 12 | 2010-06-14 | 1 | 120 | 12000 | 1 | 1 | 14 | 1 row in set (0.00 sec)
환불조회 mysql> select *from refund where rDate='2010-06-16'; +------+------------+---------+----------+--------+ | rNum | rDate | rAmount | rMileage | rPrice | | 14 | 2010-06-16 | -1 | -120 | -12000 | 1 row in set (0.00 sec)
카테고리 입력 mysql> insert into category(cNum,cName) values -> (100,'문학'), -> (200,'국어/외국어'); Query OK, 2 rows affected (0.89 sec) Records: 2 Duplicates: 0 Warnings: 0 mysql> select *from category; +------+-------------+ | cNum | cName | | 100 | 문학 | | 200 | 국어/외국어 | 2 rows in set (0.00 sec)
카테고리 100번 조회 mysql> select *from category where cNum=100; +------+-------------+ | cNum | cName | | 100 | 문학 | 1 row in set (0.02 sec) 카테고리 수정 mysql> update category set cName='문학과 소설' where cNum=100; Query OK, 1 row affected (0.05 sec) Rows matched: 1 Changed: 1 Warnings: 0 mysql> select *from category; | 100 | 문학과 소설 | | 200 | 국어/외국어 | 2 rows in set (0.00 sec)
카테고리 입력 mysql> insert into category(cNum,cName) values -> (300, '잡지'); Query OK, 1 row affected (0.08 sec) mysql> select *from category; +------+-------------+ | cNum | cName | | 100 | 문학과 소설 | | 200 | 국어/외국어 | | 300 | 잡지 | 3 rows in set (0.00 sec)
mysql> select * from category where cNum=300; +------+-------+ 카테고리 300번 조회 mysql> select * from category where cNum=300; +------+-------+ | cNum | cName | | 300 | 잡지 | 1 row in set (0.00 sec) 카테고리 삭제 mysql> delete from category where cNum=300; Query OK, 1 row affected (0.05 sec) mysql> select *from category; +------+-------------+ | cNum | cName | | 100 | 문학과 소설 | | 200 | 국어/외국어 | 2 rows in set (0.02 sec)
재고 수량 조회 mysql> select bID, bName, bStock from book; +-----+------------------------------------------+--------+ | bID | bName | bStock | | 1 | 침대와 책 :지상에서 가장 관능적인 독서기 | 100 | | 2 | 불멸1 | 99 | 2 rows in set (0.00 sec)