1.圖書借閱系統包含以下表:
會員表(member)
圖書表(title)
庫存圖書備份表(title_copy)
圖書借閱表(borrow)
預定表(reservation)
2.表信息
1)會員表包含以下字段:
會員ID(序列號)、會員名、地址、城市、電話、加入時間(默認爲系統時間)、會員ID是主鍵
2)圖書表包含以下字段:
圖書編號(序列號)、書名、書的描述信息、出版時間、作者、圖書的類別(只能是'java'、'c'、'c++'、'db'、'web')圖書編號爲主鍵
3.庫存備份表包含以下信息:
圖書編號、庫存數量(最低數量爲0)、缺少數量(默認爲0),圖書編號爲主鍵
4.圖書借閱表包含以下字段(每個會員可以借閱多本書):
序列號、圖書編號、會員ID、借閱日期(默認爲系統當前日期)、還書日期、到期日期(默認爲系統單籤日期後的一個月),序列號爲主鍵
5.預定表包含以下字段(每個會員可以預定多本書):
會員ID、圖書編號、預定日期,會員ID、圖書編號、預定日期爲聯合主鍵
3.操作步驟
1)創建用戶neu,分配用戶create session、unlimited tablespace、create table、createsequence、create view權限
SQL>CREATE USER neusoft IDENTIFIED BY neu;
SQL> GRANT create session,unlimited tablespace,create table,
create sequence,create view
TO neu;
2)創建各個表,選擇適當的數據類型並添加完整性約束
CREATE TABLE member
(member_id NUMBER(10) CONSTRAINT member_id_pk PRIMARY KEY,
m_name VARCHAR2(25) NOT NULL,
address VARCHAR2(100),
city VARCHAR2(30),
phone VARCHAR2(15),
join_date DATE DEFAULT SYSDATE NOT NULL);
CREATE TABLE title
(title_id NUMBER(10) CONSTRAINT title_id_pk PRIMARY KEY,
title VARCHAR2(60) NOT NULL,
description VARCHAR2(400) NOT NULL,
pub_date DATE,
author VARCHAR2(40),
label VARCHAR2(20) CONSTRAINT label_ck
CHECK(label IN('java','c','c++','db','web')));
CREATE TABLE title_copy
(title_id NUMBER(10) CONSTRAINT title_bak_pk PRIMARY KEY,
bak_num NUMBER(10) CONSTRAINT bak_num_c CHECK(bak_num>=0),
lack_num NUMBER(10) DEFAULT 0,
CONSTRAINT title_id_bak_fk FOREIGN KEY(title_id) REFERENCES title(title_id));
CREATE TABLE reservation
(member_id NUMBER(10) CONSTRAINT r_member_id_fk REFERENCES member(member_id),
title_id NUMBER(10) CONSTRAINT r_title_id_fk REFERENCES title(title_id),
res_date DATE,
CONSTRAINT res_s_pk PRIMARY KEY(member_id,title_id, res_date));
CREATE TABLE borrow
(borrow_seq NUMBER(10) CONSTRAINT borrow_seq_pk PRIMARY KEY,
title_id NUMBER(10) CONSTRAINT b_title_id_fk REFERENCES title(title_id),
borrow_date DATE DEFAULT SYSDATE,
return_date DATE,
exp_date DATE DEFAULT ADD_MONTHS(SYSDATE,1));
3)檢查數據字典,驗證表和約束已被完全創建
SELECT * FROM user_tables;
SELECT * FROM user_constraints;
或:
SELECT table_name
FROM user_tables
WHERE table_name IN ('MEMBER', 'TITLE', 'TITLE_COPY', 'BORROW', 'RESERVATION');
SELECT constraint_name, constraint_type, table_name
FROM user_constraints
WHERE table_name IN ('MEMBER', 'TITLE', 'TITLE_COPY', 'BORROW', 'RESERVATION');
4)創建序列來唯一地標識在會員表、圖書表、圖書借閱表中的每一行
CREATE SEQUENCE member_seq
INCREMENT BY 1
START WITH 1
NOCACHE;
CREATE SEQUENCE title_seq
INCREMENT BY 1
START WITH 1
NOCACHE;
CREATE SEQUENCE borrow_seq
INCREMENT BY 1
START WITH 1
NOCACHE;
5)驗證在數據字典中已經存在的序列
SELECT * FROM user_sequences;
或:
SELECT sequence_name, increment_by, last_number
FROM user_sequences
WHERE sequence_name IN ('MEMBER_SEQ','TITLE_ID_SEQ','BORROW_SEQ');
6)添加數據到表中,注意:數據的添加要使用序列
INSERT INTO title
VALUES (title_seq.NEXTVAL, '世界是平的','介紹世界爲什麼是平的','14-8月-07','xiyou','java');
INSERT INTO member
VALUES (member_seq.NEXTVAL, 'yang','陝西韓城','韓城',83660002,sysdate);
INSERT INTO title_copy
VALUES (title_seq.CURRVAL,10,0);
INSERT INTO borrow(borrow_seq, title_id , member_id , borrow_date, exp_date )
VALUES (borrow_seq.NEXTVAL, title_seq.CURRVAL,member_seq.currval, sysdate, ADD_MONTHS(SYSDATE,1));
INSERT INTO reservation
VALUES (member_seq.currval,title_seq.CURRVAL, sysdate);
7)創建一個名爲title_avail的視圖,顯示書的編號、書名、出版時間和書的庫存數量,從視圖中查詢所有出版日期大於2007-01-01的數據,用書的編號排序
CREATE OR REPLACE VIEW title_avail
AS
SELECT t.title_id ,t.title, c.bak_num , t.pub_date
FROM title t, title_copy c
WHERE t.title_id = c.title_id;
SELECT *
FROM title_avail
WHERE pub_date>TO_DATE('2007-01-01','yyyy-mm-dd')
ORDER BY title_id;
8)在圖書借閱表上以會員ID創建非惟一索引
CREATE INDEX bow_mem_idx
ON borrow(member_id );
9)更新庫存圖書備份表,將其中一本書名爲XXX的庫存量在原有基礎上增加10本
UPDATE title_copy
SET bak_num=bak_num+10
WHERE title_id=
(SELECT title_id
FROM title
WHERE title='世界是平的')
10)修改表結構,添加一個price列到title表,記錄書的購買價格。該列應該有8位數字長度和2位小數,驗證你的修改。
ALTER TABLE title
ADD (price NUMBER(8,2));
DESC title
11)爲每本書添加價格
UPDATE title SET price=50 WHERE title_id=1;
12)更改title表中價格字段爲非空,驗證該約束
ALTER TABLE title MODIFY (price NOT NULL);
SELECT * FROM user_constraints;
或:
SELECT constraint_name, constraint_type, search_condition
FROM user_constraints
WHERE table_name = 'TITLE';
13)查詢客戶租書信息,包含客戶編號、客戶名、書名、書的價格、借閱日期、還書日期、到期日期
SELECT m.member_id,m.m_name,t.title,t.price,b.borrow_date,b.return_date,b.exp_date
FROM member m,title t,borrow b
WHERE m.member_id=b.member_id
AND t.title_id=b.title_id;
14)刪除各個表中的數據
DELETE FROM borrow;
DELETE FROM reservation;
DELETE FROM title_copy;
DELETE FROM title;
DELETE FROM member;
15)刪除member表上的主鍵約束,並且任何與其相依賴的約束也被一起刪除
ALTER TABLE member
DROP PRIMARY KEY CASCADE;