3.1.2关系模式
(1)实体转化的关系模式
运动员(姓名,性别,运动员编号,所在院系)3NF
比赛项目(比赛类型,比赛编号,项目名称,预赛时间,决赛时间)3NF 裁判员(裁判编号,姓名,性别,裁判等级)3NF 后勤组(值班编号,值班人姓名)3NF 值班安排(值班编号,值班时间)3NF 宣传组(作者学号,作者姓名,作者院系)3NF 学院(学院名,学院排名)3NF
项目成绩(运动员编号,比赛编号,项目名称,预赛排名,决赛排名,是否破纪录)3NF
预赛(运动员编号,比赛编号) 3NF 决赛(运动员编号,比赛编号) 3NF 主持(裁判编号,比赛编号) 3NF 服务(值班编号,运动员编号) 3NF
第四章 数据库定义和数据安全性与完整性定义
4.1定义数据库模式的SQL操作
在以下的sql语句中,每个关系表都给出了相应的主键和外键,个别属性给出了check约束,并考虑引用完整性,保证的数据库的安全性和完整性定义。
create database shujuku
create table athlete /*-运动员-*/ (
YDY_name VARCHAR(20) NOT NULL, /*运动员姓名*/
YDY_sex VARCHAR(2) NOT NULL CHECK(YDYXB in('男','女')), --运动员性别
YDY_num VARCHAR(8) CONSTRAINT NUM_PK PRIMARY KEY,, --运动员编号
YDY_xym VARCHAR(20) REFERENCES xueyuan(XYM), --学院名 维护引用完整性
ON DELETE SET NULL
11 软件一班 1225112008 胡宏
ON UPSET CASECADE ) go
create table BSXM /*-比赛项目-*/ (
BSBH VARCHAR(5) PRIMARY KEY , --比赛编号 BSMC VARCHAR(20) NOT NULL, --比赛名称 BSLB VARCHAR(20) NOT NULL, --比赛类别
BSSJ_ys TIMESTAMP NOT NULL, --预赛比赛时间 BSSJ_js TIMESTAMP NOT NULL --决赛比赛时间 ) Go
create table JUDGE /*-裁判-*/ (
CPBH VARCHAR(5) CONSTRAINT BSBH_PK PRIMARY KEY , --裁判编号
CPXB VARCHAR(2) NOT NULL, CHECK(CPXB in('男','女')), --裁判性别 CPXM VARCHAR(20) NOT NULL, --裁判姓名
CPDJ VARCHAR(10) NOT NULL CHECK (CPDJ IN (‘1’,’2’,’3’ ) ) , --裁判等级
ON DELETE SET NULL ON UPSET CASECADE ) go
create table houqinzu /*-后勤组-*/ (
ZBBH VARCHAR(5) CONSTRAINT ZBBH_PK PRIMARY KEY, --值班编号
ZBRXM INT NOT NULL , --值班人姓名 ) go
create table zhiban /*值班安排*/ (
ZBBH varchar(5) not null, --值班编号 ZBSJ varchar(20) not null, --值班时间 primary key(ZBBH,ZBSJ) ) go
create table xuanchuan /*-宣传-*/ (
ZZXM VARCHAR(20) , --作者姓名
ZZYX VARCHAR(20) NOT NULL, --作者院系
ZZXH VARCHAR(20) PRIMARY KEY --作者学号
12 软件一班 1225112008 胡宏
) go
create table xueyuan /*-学院-*/ (
XYM VARCHAR(20) CONSTRAINT XYM_PK PRIMARY KEY,--学院名 XYPM VARCHAR(20) NOT NULL --学院排名 ) go
create table athleteCJ /*-运动员成绩-*/ (
YDY_bh VARCHAR(20) NOT NULL , --运动员编号
YDY_bsbh VARCHAR(20) NOT NULL , --参加比赛编号
YDY_bsmc VARCHAR(20) NOT NULL , --运动员参加比赛的项目名称 YDY_yspl VARCHAR(5) NOT NULL, --运动员预赛排名 YDY_jspl VARCHAR(5) NOT NULL, --运动员决赛排名
PJL VARCHAR(2) NOT NULL CHECK(PJL in('是','否')), --是否破纪录 PRIMARY KEY (YDY_bsbh ,YDY_bh) -- 主键声明 ) go
CREATE TABLE JS /*预赛表*/ (
YDY_bh VARCHAR(20) NOT NULL , --运动员编号 BSBH varchar(5) not null, --比赛编号 Primary key(YDY_bh ,BSBH ) )
CREATE TABLE JS /*决赛表*/ (
YDY_bh VARCHAR(20) NOT NULL , --运动员编号 BSBH varchar(5) not null, --比赛编号 Primary key(YDY_bh ,BSBH ) )
CREATE TABLE ZHUCHI /*裁判主持比赛*/ (CPBH VARCHAR(5) not null, -- 裁判编号 BSBH varchar(5) not null, --比赛编号 primary key(CPBH,BSBH) )
CREATE TABLE fuwu /*后勤组服务*/
13 软件一班 1225112008 胡宏
(YDY_numVARCHAR(5) not null, ZBBH varchar(5) not null, Primary key(YDY_num,ZBBH) )
4.2数据安全性与完整性定义
4.2.1创建相关的必要断言
1.声明裁判等级低于3级的不能主持比赛的判罚 CREATE ASSERTION CAIPAN CHECK (NOT EXISTS
(SELECT CPXM
FROM JUDGE WHERE CPDJ>3
) );
4.2.2创建相关触发器
1.该触发器的作用是阻挠修改运动员已确定的决赛成绩排名 CREATE TRIGGER CJ_plTrigger
AFTER UPDATE OF YDY_jspl ON athleteCJ REFERENCING
OLD ROW AS OldTuple, NEW ROW AS NewTuple FOR EACH ROW
WHEN (OldTuple.YDY_jspl>NewTuple.YDY_jspl) UPDATE athleteCJ
14 软件一班 1225112008 胡宏
OldTuple.YDY_jspl =NewTuple.YDY_jspl ;
15 软件一班 1225112008 胡宏 SET YDY_jspl = WHERE YDY_jspl