본문 바로가기
Department/Database

데이터베이스 팀프로젝트 보고서(Team Project Report)

by mean. 2020. 7. 14.
728x90
반응형

google play store

1. 기말과제 제안서 제출된 내용과 대비차이점, 발전성

• 도서종류에 E-book, 오디오북 속성 삭제
Why? 애초에 개체의 값에 해당하는 부분이었기에 속성으로 표현할 필요가 없었다.

• ISPN을 ISBN으로 수정
Why? ISPN은 Internet Service Provider Number로써, 인터넷 상에서 개별구별자로 사용되는 개념이라, 좀 더 구체적으로 해당하는 ISBN(International Standard Book Number, ISBN)으로 수정했다.

• 공급과 사용에 대한 관계이름에 대한 이름변경
Why? ER모델을 관계 데이터모델로 변환하는 과정에 있어서 공급과 사용에 대한 관계이름의 중복으로 인해 모호성이 발생하여서 좀 더 구체적으로 설명할 필요성이 있었다.

• 순환적 관계인 할인 제외
Why? 예를 들어, 영화와 영화, 도서와 도서가 할인이라는 관계를 맺는다는 것이 의미적으로 맞지 않으므로 삭제하였습니다. 또한, 이벤트와 이벤트가 할인이라는 관계에 있어서는 이벤트 자체가 할인이라는 의미를 포함하기 때문에 삭제하였다.

• 구매내역 삭제
Why? 예를 들면 도서사용(ISBN(FK), 사용자아이디(FK), 현재페이지)에서 속성값들이 구매내역에 포함되는 내용이기에 해당하는 의미를 표현할 수 있기에 삭제하였다.

• 이벤트의 기본키를 APP이름을 이벤트 번호로 변경
Why? 관계 데이터모델로 변환하는 과정에서 애플리케이션의 기본키인 앱이름을 외래키로 갖기 때문에 중복이 발생하여 수정하였다.

• 애플리케이션의 사용 관계에 구매 내역을 사용기록으로 변경
Why? 구매내역은 다른 기본 키로 나타낼 수 있기 때문에 사용자가 프로그램을 사용한 기록들을
저장하기 위해 사용기록으로 변경하였다.


2. 요구사항 분석 및 개념 모델링 (기말과제 제안서 제출문서 내용 정제 )

요구사항 기술서

• 스토어에는 애플리케이션을 공급하는 공급자와 이를 사용하는 사용자가 있다.

• 공급자가 애플리케이션을 등록하려면 공급자 아이디, 전화번호, 프로그램명, 대표자를 입력해야 한다.
이때, 공급자는 공급자 아이디로 식별한다.

• 어플을 사용하는 사용자는 사용자 아이디, 이름, 성별, 생년월일, 주소의 정보를 가지며
이때, 사용자는 사용자 아이디로 식별한다.

• 사용자가 상품에 대해 결제하기 위해서는 결제수단을 등록하고 충전을 해야한다. (무료인 상품은 0원으로 결제된다.) 충전할 때에는 고유번호, 결제수단, 남은 잔액에 대한 정보를 가지며, 결제수단은 여러 개를 가질 수 있으며, 이때 사용자의 사용자 아이디가 없으면 충전할 때의 고유번호를 스스로 식별할 수 없다.

• 애플리케이션, 영화, 도서를 공급하는 공급자가 사용자가 될 수 있다는 점을 고려하여, 각 제품을 개발하는 공급자와 사용하는 사용자 두 가지의 역할로 나누었으며, 소속이 같은 팀으로 소속되어 있다면, 고유한 팀 이름, 팀 규모를 속성으로 갖는다. 여기서 팀은 규모에 따라 개인, 단체, 회사 등이 될 수 있다.
사용자 or 공급자 한명이 하나의 팀을 이루고, 사용자 or 공급자 여러 명이 여러 개의 팀에 속할 수 있다.

• 스토어는 또한 공급을 하는 공급자와 사용을 하는 사용자가 이용할 수 있는 도서, 영화, 애플리케이션의 정보를 가진다. 공급자는 여러 개의 도서, 영화, 애플리케이션을 공급할 수 있고, 사용자는 여러 명이 여러 개의 도서, 영화, 애플리케이션을 사용할 수 있다.

• 도서에는 도서번호(ISBN), 글쓴이, 도서종류, 금액, 페이지 수에 대한 정보를 가지며, 도서번호로 식별을 한다. 만약 공급자가 도서를 공급할 때는 도서명을, 사용자가 도서를 이용할 때는 현재페이지에 대한 정보를 추가로 갖는다.

• 영화에는 영화코드, 감독명, 시청등급, 상영시간, 영화정보에 대한 정보를 가지며, 영화코드로 식별을 한다. 공급자가 영화를 공급할 때는 영화명을, 사용자가 영화를 시청할 때는 시청시간에 대한 정보를 추가로 갖는다.

• 애플리케이션에는 카테고리, 어플 이름, 설명, 국가, 콘텐츠 등급에 대한 정보를 가지며, 어플 이름으로 식별이 가능하다. 이때, 카테고리는 여러 개를 가질 수 있다. 공급자가 애플리케이션을 공급할 때는 버전에 대한 정보를 추가로 가지며, 사용자가 애플리케이션을 사용할 때는 사용기록에 대한 정보를 추가로 갖는다.

• 또한, 애플리케이션은 상황에 따라 이벤트를 진행하는데 애플리케이션 하나당 여러 개의 이벤트를 가질 수 있다. 이때, 이벤트는 어플 이름, 이벤트의 내용, 일자에 대한 정보를 가진다. 이때, 애플리케이션은 앱 이름으로 식별이 가능하다.
• 애플리케이션은 평점 및 리뷰의 정보를 가지는데, 애플리케이션 하나당 여러 개의 평점 및 리뷰를 가질 수 있다. 이때 평점 및 리뷰는 사용자 아이디, 평점, 리뷰, 작성 일에 대한 속성을 가지며 사용자 아이디로 식별한다.

E-R 다이어그램

E-R 모델을 관계 데이터모델로 변환

도서(ISBN, 글쓴이, 도서종류, 금액, 페이지수, 공급자아이디(FK), 도서명)
도서사용(ISBN(FK), 사용자아이디(FK), 현재페이지)
영화(영화코드, 감독명, 시청등급, 시간, 영화정보, 공급자아이디(FK), 영화명)
영화사용(영화코드(FK), 사용자아이디(FK), 시청시간)
공급자(공급자아이디, 전화번호, 프로그램명, 대표자)
팀(팀이름, 규모, 공급자아이디(FK))
소속(팀이름(FK), 사용자아이디(FK))
사용자(사용자아이디, 이름, 성별, 생년월일, 주소)
결제(사용자아이디(FK), 고유번호, 잔액)
결제수단(사용자아이디(FK), 고유번호, 결제수단)
애플리케이션(앱이름, 설명, 국가, 콘텐츠등급, 공급자아이디(FK), VERSION)
어플사용(앱이름(FK), 사용자아이디(FK))
어플카테고리(앱이름(FK), 카테고리)
이벤트(이벤트번호, 내용, 일자, 앱이름(FK))
평점 및 리뷰(사용자아이디, 평점, 리뷰, 일자, 앱이름(FK))


테이블정의서 - 각 속성 및 제약조건에 대한 간단한 설명
• Oracle SQL TABLE CREATE문

Table name : 도서
create table Book (
isbn varchar2(30) primary key, --ISBN
writer varchar2(30) not null, --글쓴이
kinds varchar2(30), --도서종류
price number(10), --금액
all_page number(5), --페이지수
book_name varchar2(30) not null, --도서명
supplier_id varchar2(30), --공급자아이디(FK)
check (isbn like '%-%-%-%-%')
);

Table name : 도서사용
create table Book_use (
isbn varchar2(30), --ISBN(FK)
user_id varchar2(30), --사용자아이디(FK)
read_page number(5), --현재페이지
primary key(isbn,user_id)
);

Table name : 영화
create table Movie (
movie_code varchar2(30) primary key, --영화코드
director varchar2(30), --감독명
audience_rating varchar2(30), --시청등급
running_time varchar2(30), --시간
information varchar2(500), --영화정보
supplier_id varchar2(30), --공급자아이디(FK)
movie_name varchar2(30) --영화명
);

Table name : 영화사용
create table Movie_use(
movie_code varchar2(30), --영화코드(FK)
user_id varchar2(30), --사용자아이디(FK)
watching_time varchar2(30), --시청시간
primary key(movie_code,user_id)
);

Table name : 공급자
create table Supplier (
supplier_id varchar2(30) primary key, --공급자아이디
phone_number varchar2(30) UNIQUE, --전화번호
program_name varchar2(30), --프로그램명
representative varchar2(30), --대표자
check(phone_number like '%-%-%')
);

Table name : 팀
create table Team (
names varchar2(30) primary key, --팀이름
scales varchar2(10) not null, --규모
supplier_id varchar2(30) --공급자아이디(FK)
);
Table name : 소속
create table Belonging (
names varchar2(30), --팀이름(FK)
user_id varchar2(30), --사용자아이디(FK)
primary key(names, user_id)
);

Table name : 사용자
create table User_ (
user_id varchar2(30) primary key, --사용자아이디
names varchar2(10), --이름
gender varchar2(10), --성별
dob varchar2(30), --생년월일
address varchar2(20), --주소
check(dob like '%/%/%')
);

Table name : 결제
create table payment (
user_id varchar2(30), --사용자아이디(FK)
serial_number varchar2(10), --고유번호
balance number(10), --잔액
primary key(user_id, serial_number)
);

Table name : 결제수단
create table M_o_Payment(
user_id varchar2(30), --사용자아이디(FK)
serial_number varchar2(30), --고유번호
m_o_payment varchar2(30), --결제수단
primary key(user_id, serial_number, m_o_payment)
);

Table name : 애플리케이션
create table application_ (
app_name varchar2(30) primary key, --앱이름
info varchar2(100), --설명
content_rank varchar2(10), --콘텐츠등급
tag_ varchar2(10), --태그
type_ varchar2(10), --타입
supplier_id varchar2(30), --공급자아이디(FK)
version_ varchar2(30), --VERSION
check(version_ like '%.%')
);

Table name : 어플사용
create table app_use (
app_name varchar2(30), --앱이름(FK)
user_id varchar2(30), --사용자아이디(FK)
primary key(app_name,user_id)
);
Table name : 어플카테고리
create table app_category (
app_name varchar2(30), --앱이름(FK)
category_ varchar2(10), --카테고리
primary key(app_name,category_)
);
Table name : 이벤트
create table event (
event_number number(30) primary key, --이벤트번호
infomation varchar2(100), --내용
app_name varchar2(30), --앱이름(FK)
date_ varchar2(30), --일자
check(date_ like '%/%/%')
);

Table name : 평점 및 리뷰
create table Ratings_And_Review (
user_id varchar2(15) primary key, --사용자아이디
rating varchar2(10), --평점
review varchar2(100), --리뷰
app_name varchar2(30), --앱이름(FK)
date_ varchar2(30), --일자
check(date_ like '%/%/%')
);


Oracle SQL의 alter을 이용한 foreign key 설정
alter table Book add constraint isbn foreign key(supplier_id) references Supplier(supplier_id);
--도서 table은 Supplier table의 supplier_id을 외래키로 갖는다.

alter table Book_use add foreign key(isbn) references Book(isbn);
alter table Book_use add foreign key(user_id) references User_(user_id);
--도서사용 table은 Book table의 isbn과 User_ table의 user_id를 기본키로 사용하기 위해 외래키로 지정을 하였다.

alter table Movie add foreign key(supplier_id) references Supplier(supplier_id);
--영화 table은 Supplier table의 supplier_id를 외래키로 갖는다.

alter table Movie_use add foreign key(movie_code) references Movie(movie_code);
alter table Movie_use add foreign key(user_id) references User_(user_id);
--영화사용 table은 Movie table의 movie_code와 User_ table의 user_id를 외래키로 갖는다.

alter table Supplier add foreign key(supplier_id) references Supplier(supplier_id);

alter table Team add foreign key(supplier_id) references Supplier(supplier_id);

alter table Belonging add foreign key(names) references Team(names);
alter table Belonging add foreign key(user_id) references User_(user_id);

alter table payment add foreign key(user_id) references User_(user_id);

alter table M_o_Payment add foreign key(user_id) references User_(user_id);

alter table application_ add foreign key(supplier_id) references Supplier(supplier_id);

alter table app_use add foreign key(app_name) references application_(app_name);
alter table app_use add foreign key(user_id) references User_(user_id);

alter table app_category add foreign key(app_name) references application_(app_name);

alter table event add foreign key(app_name) references application_(app_name);

alter table Ratings_And_Review add foreign key(app_name) references application_(app_name);


Oracle sql의 insert문을 이용한 데이터 삽입
위의 create와 alter을 이용한 foreign key 설정 후 insert문을 이용하여서 값의 중복 없이 data값을 넣기 위해 아래와 같은 레벨의 순서를 거쳐서 입력을 하여야 한다.

  • Level 1 data insert (사용자, 공급자)

insert into user_ values ('d9249','이상민','남자','96/03/05','제주도서귀포');
insert into user_ values ('d9130','임규원','남자','95/04/02','서울동작구');
insert into user_ values ('d1234','정범식','남자','96/02/22','서울강남');
insert into user_ values ('d9244','한상준','남자','96/09/05','부산해운대구');
insert into user_ values ('d9133','이소영','여자','95/04/02','서울압구정');
insert into user_ values ('d1222','김민아','여자','96/08/18','충남당진');

insert into supplier values ('dodo9249','010-2344-2456','DB의 기초','kakao corp.');
insert into supplier values ('d123','010-5689-2348','C에서 A까지','이상민');
insert into supplier values ('find156','010-2467-1287','c프로그래밍 댐벼','sumsung');
insert into supplier values ('dddo9249','010-4322-2556','인간심리의이해','LG');
insert into supplier values ('dd123','010-5645-2338','A에서 D까지','김혜인');
insert into supplier values ('ffind156','010-9812-1287','자바를 잡아','skTelecom');
insert into supplier values ('fao92','010-8282-4545','판매왕의비결','김판수');
insert into supplier values ('sala12','010-2873-2008','현명한사람들','씽크빅');
insert into supplier values ('qpewe','010-7735-2989','토익단기마스터','IBM');

  • Level 2 data insert (도서, 팀, 영화, 애플리케이션, 결제)
    INSERT INTO Book values('00001-231-23-12-3','이상민','스릴러',20000,200,'DB 끊는 방법','dodo9249');
    INSERT INTO Book values('34201-455-25-17-3','임규원','자기개발',19000,100,'C에서 A까지','d123');
    INSERT INTO Book values('25434-345-68-24-9','정범식','컴퓨터사이언스',50000,100,'No base C language','find156');

insert into team values ('samsung','팀','find156');
insert into team values ('이상민','개인','d123');
insert into team values ('kakao corp.','회사','dodo9249');

insert into movie values('20112207','크리스토퍼 맥쿼리','15세','147분','도난당한 핵무기를 되찾아 오는 위험천만한 작전 중...','dd123','미션임파서블:폴아웃');
insert into movie values('20110295','강제규','15세','137분','1938년 경성. 제 2의 손기정을 꿈꾸는 조선쳥년 준식과...','dddo9249','마이웨이');
insert into movie values('20112621','가이 리치','15세','128분','더욱 강렬하게, 더욱 스릴 있게 세상을 구할 홈즈의 추리가...','ffind156','셜록홈즈:그림자 게임');

insert into application_ values ('카카오톡','전세계 어디서나 무료로 즐기는 그룹채팅 및 1:1채팅','A','카톡','채팅','fao92','8.6');
insert into application_ values ('미디어 플레이어','우아한 아이패드에서 사용할 가치가 있는 동영상 플레이어','S','패드','동영상','sala12','8.5');
insert into application_ values ('인공지능 배우기','알고리즘으로 배우는 인공지능, 머신러닝, 딥러닝 입문','B','AI','교육','qpewe','2.8');

insert into payment values ('d9249','1234',10000);
insert into payment values ('d9130','1262',30040);
insert into payment values ('d1234','5446',42660);

  • Level 3 data insert (소속, 결제수단, 영화사용, 도서사용, 어플사용, 어플카테고리, 이벤트)
    insert into belonging values ('kakao corp.','d9249');
    insert into belonging values ('samsung','d9130');
    insert into belonging values ('이상민','d1234');

insert into m_o_payment values ('d9249','1234-1234-1341-1324','Checkcard');
insert into m_o_payment values ('d9130','1314-1264-1789-6899','Creditcard');
insert into m_o_payment values ('d1234','5446-3767-7486-4467','Creditcard');

insert into movie_use values ('20112207','d9249','57분');
insert into movie_use values ('20112207','d9130','77분');
insert into movie_use values ('20112207','d1234','27분');

insert into Book_use values('00001-231-23-12-3','d9249',57);
insert into Book_use values('34201-455-25-17-3','d9130',47);
insert into Book_use values('25434-345-68-24-9','d1234',37);

insert into app_use values ('카카오톡','d9249');
insert into app_use values ('카카오톡','d9130');
insert into app_use values ('카카오톡','d1234');

insert into app_category values ('카카오톡','소셜');
insert into app_category values ('미디어 플레이어','유틸');
insert into app_category values ('인공지능 배우기','로봇');

insert into event values (1234512345,'오늘만 특가','미디어 플레이어','19/12/20까지');
insert into event values (1234512346,'오늘만 특가','인공지능 배우기','19/12/31까지');
insert into event values (1234512347,'접속시 코인 증정!','카카오톡','20/20/20까지');

insert into Ratings_And_Review values ('d9249','4.5점','아주 사용하기 편합니다!','카카오톡','19/10/29');
insert into Ratings_And_Review values ('d9130','5.0점','사용하기 너무 편합니다.','카카오톡','19/07/29');
insert into Ratings_And_Review values ('d1234','3.5점','중간중간 버그가 발생하네요ㅠ','카카오톡','18/2/29');
oracle sql문 실행결과 - 실제 실행 결과가 함께 나타나야 함. and 소스파일


table book

table book_use

table movie

table movie_use

table Supplier

table team

table Belonging

table User_

table payment

table M_o_payment

table application

table app_use

table app_category

table event

table Ratings_And_Review

 

728x90
반응형

'Department > Database' 카테고리의 다른 글

데이터베이스 과제#7 : 정규화 연습문제 풀이  (0) 2020.07.14
데이터베이스 과제#6  (0) 2020.07.14
데이터베이스 과제#5  (0) 2020.07.14
데이터베이스 과제#4  (0) 2020.07.14
데이터베이스 과제#3  (0) 2020.07.14