校园一卡通数据库部分设计

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

2.ER模型到关系模型的转换

学生(学号,姓名,性别)

主键

卡(卡号,学号,状态,余额,发卡日期,截止日期)主键外键

设备(设备编号,地点)

主键

充值(充值服务编号,卡号,学号,充值金额,充值日期)

主键外键外键

刷卡(本次消费编号,设备编号,卡号,消费金额,消费时间)

主键外键外键

3.建表sql语句

create table 刷卡(

本次消费号number primary key,

设备编号number,

卡号number,

foreign key(设备编号) references 设备(设备编号),

foreign key(卡号) references 卡(卡号)

);

create table 学生(

学号varchar2(10)primary key,

姓名varchar2(20),

性别varchar2(5)

);

create table 充值(

充值服务编号varchar(10)primary key, 卡号number,

学号number,

充值金额number,

充值日期date,

foreign key(学号) references 卡(学号),foreign key(卡号) references 卡(卡号)

);

create table 卡(

卡号number primary key,

学号number,

状态varchar(5),

余额number,

发卡日期date,

截止日期date

);

create table 设备(

设备编号varchar2(10)primary key,

地点varchar2(20)

);

4.索引设计

1.对学生表按学号建立索引,可加快对学生用户查询:index_student

Create index index_student

on 学生(卡号);

2.对一卡通信息表的挂失字段建立索引:index_card_lost

Create index index_card_lost

on 卡(状态);

5.触发器

充值触发器

create or replace trigger cards_info

after insert on 充值

for each row

begin

UPDATE 卡SET 余额= 卡.余额+new.充值金额WHERE 充值.卡号= 卡.卡号end;

刷卡触发器

create or replace trigger cards_info

after insert on 刷卡

for each row

begin

UPDATE 卡SET 余额= 卡.余额+new.消费金额WHERE 刷卡.卡号= 卡.卡号

end;

6.各个业务功能对应的SQL语句、存储过程

发卡

create or replace procedure 发_卡

(start_card IN 卡.卡号%TYPE,end_card IN 卡.卡号%TYPE,

start_stu_number IN 学生.学号%TYPE,end_stu_number IN学生.学号%TYPE) IS j int;

begin

j:=start_stu_number;

CREATE OR REPLACE PROCEDURE 插入_卡

(start_card IN卡.卡号%TYPE,end_card IN 卡.卡号%TYPE,

start_time IN 卡.发卡时间%TYPE,end_time IN 卡.截止时间%TYPE) IS

BEGIN

FOR i IN start_card..end_card LOOP

insert into cards values(i,NULL,0,0,start_time,end_time);

END LOOP;

END;

/

if end_card-start_card=end_stu_number-start_stu_number then

for i in start_card..end_card LOOP

update 卡set 卡号=i where 学号=j;

j:=j+1;

end loop;

end if;

end;

create or replace procedure 发卡

(num1 卡.卡号%TYPE,num2 卡.卡号%TYPE,

money 卡.余额%TYPE,

start_time 卡.发卡时间%TYPE,end_time 卡.截止时间%TYPE,

start_stu_number 学生.学号%TYPE,end_stu_number 学生.学号%TYPE)IS

begin

插入_卡(num1,num2,1,start_time,end_time);

发_卡(num1,num2,start_stu_number,end_stu_number);

end;

相关文档
最新文档