8. 필드명 타입 비고
USERID number
Primary Key1,
Foreign Key
GENRE varchar(30) Primary Key2
9. 필드명 타입 비고
TITLE varchar(100) Primary Key
PUBLISHDATE date
PUBLISHER varchar(100)
AUTHOR varchar(30)
INTRODUCTION varchar(1000)
10. 필드명 타입 비고
USERID number
Primary Key1,
Foreign Key
LNTITLE varchar(100)
Primary Key2,
Foreign Key
REVIEW varchar(1000)
11. 필드명 타입 비고
USERID number
Primary Key1,
Foreign Key
LNTITLE varchar(100)
Primary Key2,
Foreign Key
SCORE number 0<= and <=5
12.
13.
14.
15.
16. insert into lnuser values ({}, {}, '{}')
delete from lnuser where userid={}
17. select score
from lnscore
where lntitle = '{}' and userid = {}
select avg(score) "Avg", count(score) "Count"
from lnscore
where lntitle = '{}'
group by lntitle
18. select rev.userid, rev.review, sco.score
from lnreview rev left outer join lnscore sco
on (rev.userid = sco.userid
and rev.lntitle = sco.lntitle)
where rev.lntitle = '{}'
order by sco.score
Editor's Notes
안녕하세요 소프트웨어융합학과 박준호입니다.
데이터베이스 프로젝트 라이트노벨 감상 공유 시스템 발표 시작하겠습니다.
라이트노벨이 그게 뭐야? 하고 생각하신 분들도 계실텐데 이게 뭔지 하나씩 설명하기엔 발표 시간이 아쉬우니 간단하게 소설 감상 공유 시스템이라고 생각하시면 될 것 같습니다.
목차입니다.
요구사항 분석, DB 설계, 애플리케이션, 시연 순으로 이루어집니다.
DB 설계는 ER 다이어그램과 데이터베이스 스키마 관련 내용이 들어가고, 애플리케이션에는 구현 방법, 주요 기능, 주요 질의문을 설명합니다.
요구사항 분석입니다.
이 프로그램이 어떤 것을 요구받고 있는가 하는 것일 이야기하겠습니다.
먼저, 라이트노벨의 정보를 저장하고, 이것을 검색할 수 있어야 합니다.
또 감상을 공유할 수 있어야 합니다. 그를 위해 사용자를 등록할 수 있어야 하고, 사용자 간에 감상을 공유할 수 있어야 합니다.
또 책에 대해 평점과 서평을 달 수 있어야 합니다.
이것을 만족하기 위해 DB를 어떻게 설계하였을까요.
먼저 ER 다이어그램입니다.
사용자와 라이트노벨 두 개의 엔티티가 존재합니다. 사용자 엔티티는 ID, 나이, 이름, 좋아하는 장르를 애트리뷰트로 갖습니다. 좋아하는 장르는 다치 애트리뷰트입니다.
라이트노벨 엔티티는 제목, 출판년월, 출판사 등의 애트리뷰트를 갖습니다.
둘 사이에는 서평 쓰기, 평점 주기의 관계가 있으며 각각 서평, 평점 애트리뷰트로 관계를 설명합니다.
이것을 데이터베이스 스키마로 다음과 같이 사상하였습니다.
먼저 사용자 엔티티의 일부를 사상한 LNUSER 테이블입니다. USERID를 기본키로 가지며, 나이와 이름을 저장합니다.
FAVGENRE 테이블은 다치 애트리뷰트였던 좋아하는 장르를 저장하기 위한 테이블입니다.
USERID는 LNUSER 테이블의 USERID에 대한 외래 키입니다. 또 USERID와 GENRE를 동시에 기본키로 갖습니다.
다음은 라이트노벨 엔티티를 사상한 LIGHTNOVEL 테이블입니다.
제목, 출판일자 등의 데이터를 갖습니다. 제목이 기본키입니다.
서평 쓰기 관계를 사상한 LNREVIEW 테이블입니다. 서평을 저장하는 REVIEW 애트리뷰트와 함께 외래 키이지 기본 키인 USERID, LNTITLE 애트리뷰트를 갖습니다.
평점 주기 관계를 사상한 LNSCORE 테이블입니다.
마찬가지로 평점을 저장하는 SCORE 애트리뷰트와 함께 USERID, LNTITLE을 외래키이자 기본키로 갖습니다.
애플리케이션에 대해 이야기합니다.
먼저 어떤 기술로 구현했는가 입니다. 파이썬에서 UI를 개발하고, DB와 연동했습니다. 사용한 DBMS는 Oracle db로, 로컬에서 연결했습니다.
애플리케이션의 주요 기능입니다. 먼저 관리자 메뉴입니다.
여기서는 사용자 관리, 책 관리, 서평/평점 관리를 할 수 있습니다.
각각을 일람할 수 있고, 추가하거나 삭제할 수 있습니다. 다만, 평점과 서평은 추가할 수 없고, 서평만 삭제할 수 있습니다.
서평에 문제가 되는 문구가 들어갔을 때를 가정했습니다.
사용자 메뉴입니다.
개인을 식별하기 위해 회원가입하거나 로그인하는 기능을 갖고 있습니다. 로그인할 때는 키 값을 입력하여 들어갑니다.
또 책을 검색하고, 선택할 수 있습니다. 책을 선택하면 그 책에 평점과 서평을 남길 수 있습니다.
이외에도 자신이 쓴 서평과 평점을 일람할 수 있는 기능이 있습니다.
지금부터는 주요 질의문입니다.
insert와 delete, update를 이용한 데이터 제어문을 많이 사용하였습니다.
주로 회원가입하거나 서평을 쓰거나 관리자가 책과 사용자를 삭제할 때 사용했습니다.
또 여러 select 질의문을 사용했습니다.
간단하게 필요한 정보를 갖고 오는 질의문부터 group by를 곁들인 집단함수까지 다양한 select문을 썼습니다.
책의 평균 평점을 표시할 때, 혹은 사용자가 책에 대해 입력한 평점이나 서평을 갖고올 때 사용했습니다.
마지막으로는 서평과 평점을 한꺼번에 가져오기 위해 사용한 left outer join 질의문입니다.
이 질의문은 한 책의 서평을 일람할 때 사용한 것입니다.