Oracle之映像租赁系统
一、系统描述
映像租赁系统:
在美国,由于知识产权得到了很好的保护,所以一般不会出现盗版的问题。美国人除去在电影院看电影之外就是在影像店租碟回家去看。在这种情况下,影相出租的店铺就比较多。在信息化的背景下,设计一套系统管理影像出租业务成了当务之急,于是通过和店铺经理沟通,获得如下业务信息:
1.凡是想要到该影像店租赁影碟的被称为会员(Member),只有成为该店的会员才能够租借该店的影像资(Title)。
2.影像店中不定期会购买一些影像资料(Title),并且获得了复制该影像资料的权力,每一份影像制品可以有多个拷贝,每一份拷贝称为一个复制条目(TitleCopy)。
3.对客户而言,原始的影像资料(Title)只能被预定并且可以同时接受多份预定(Reservation),客户可以租赁的是影像拷贝(TitleCopy)。
4.任何一个客户的租赁信息(Rental)都必须存档以便将来店铺对客户的租赁进行评估。
通过和租赁店经理详细面谈,了解更详细的业务的信息:
1.每一个会员必须被记录的信息包括会员编号id,而且每个会员的编号是唯一的,姓名name, 成为会员的日期join_date,以及其他需要被记录的信息包括(住宅地址address, 所在城市city, 住宅电话phone)。
2.影像制品(Title)必须被记录的信息包括编号id,而且所有影像制品的编号都是唯一的,标题title,影片说明description,价格price,和其他如下信息(分级rating,种类category, 发行日期release_date)。
3.每一份影像拷贝(TitleCopy)都有各自的编号id,同一个影像的若干拷贝编号不同,但是不同的影像拷贝的编号可能会重复。必须记录下是否已经出租,以便于店员随时能够查询拷贝资料的当前状态(status)。
4.系统中允许会员预定某项影像资料,但必须提前预约租赁时间(res_date)。
5.每一项出租事项需要记录下来(租借日期book_date,实际归还日期act_ret_date,期待归还日期/过期日期(exp_ret_date)。
二、E-R图
三、表实例图
title表:
member表:
title_copy表:
reservation表:
rental表:
四、建表语句
//创建title表
create table title(
id number(7) ,
title varchar2(15) constraint title_title_nn not null,
description varchar2(15) constraint title_description_nn not null,
rating char(1),
category varchar2(15),
release_date date,
price number(7,2) constraint title_price_nn not null,
constraint title_id_pk primary key(id)
);
//创建member表
create table member(
id number(7),
last_name varchar2(15) constraint member_last_name_nn not null,
first_name varchar2(15),
address varchar2(15),
city varchar2(10),
phone varchar2(11),
join_date date constraint member_join_date_nn not null,
constraint member_id_pk primary key(id)
);
//创建title_copy表
create table title_copy(
id number(7),
status varchar2(8) constraint title_copy_status_nn not null,
title_id number(7) constraint title_copy_title_id_nn not null constraint title_copy_title_id_fk references title(id),
constraint title_copy_id_pk2 primary key(id,title_id)
);
//创建reservation表
create table reservation(
res_date date,
title_id number(7) constraint res_title_id_nn not null
constraint res_title_id_fk references title(id),
member_id number(7) constraint res_member_id_nn not null
constraint res_member_id_fk references member(id),
constraint res_res_date_pk3 primary key(res_date,title_id,member_id)
);
//创建rental表
create table rental(
book_date date,
act_ret_date date,
exp_ret_date date,
title_copy_id number(7),
member_id number(7) constraint rental_member_id_nn not null
constraint rental_member_id_fk references member(id),
title_copy_title_id number(7),
constraint rental_book_date_pk3 primary key(book_date,title_copy_id,title_copy_title_id),
constraint rental_title_copy_id_fk2 FOREIGN KEY(title_copy_id,title_copy_title_id) references title_copy(id,title_id)
)