数据库完整性与安全性实验 下载本文

)

create table distribute( CellID char(256) not null, Freq int not null, foreign key (CellID) references Cell, foreign key (CellID,Freq) references Pingdian )

create table xiaoqu( CellID char(256) not null, AdjectID char(256) not null, foreign key (CellID) references Cell, foreign key (CellID,AdjectID) references neighbourhood )

4建表时,使用check谓词,通过断言,添加如下一些约束: 1个MSC最多管理10个BSC。

GO

create trigger Bsc_to_Msc on Bsc after insert as

if ((select count(Bsc.MscID) from Bsc,inserted where Bsc.MscID=inserted.MscID group by Bsc.MscID)>10) begin

print '1个MSC最多管理10个BSC。' rollback transaction end

1个BSC最多管理50个小区/扇区。

GO

create trigger Cell_to_Bsc on Cell after insert as

if ((select count(Cell.Btsname) from Bsc,Bts,Cell,inserted where Bts.Btsname=inserted.Btsname and Bts.BscID=Bsc.BscID group by Bsc.BscID)>50) begin

print '1个BSC最多管理50个小区/扇区。' rollback transaction end

1个BTS可以连接至1-3个BSC。

GO

create trigger Bts_to_Bsc on Bts after insert as

if ((select count(Bts.BscID) from Bts,inserted where Bts.Btsname=inserted.Btsname group by Bts.BscID)>3) begin

print '1个BTS可以连接至1-3个BSC。' rollback transaction end

1个MS可以位于1到6个BTS的覆盖范围内。

GO

create trigger MS_to_serverr on serverr after insert as

if ((select count(serverr.IMEI) from serverr,inserted group by serverr.Btsname)>6) begin

print '1个MS可以位于1到6个BTS的覆盖范围内。' rollback transaction end

小区/扇区所使用的频点号在[1,124]之间。

create table Pingdian (

CellID char(256) not null, Freq int not null, primary key (CellID,Freq), check(Freq>=1 and Freq<=124) )

5选取定义了主键的关系表,向该表插入在主属性上取值为空的元组,观察系统反应;选取表中某些或某个元组,修改这些元组在主属性上的取值,或插入新元组,使这些元组与表中已有其它元组的主属性取值相同,观察系统反应; (选定MSC表)

insert into Msc(MscID,Mscname,Msccompany,Msclongitude,Msclatitude,Mscaltitude) values (NULL,'BIG','NOKIA',117.21,40.22,30)

在MSC表有数据的情况下(MscID=5214)

insert into Msc(MscID,Mscname,Msccompany,Msclongitude,Msclatitude,Mscaltitude) values ('5214','BIG','NOKIA',117.21,40.22,30)

6 选取定义了候选键的关系表,向该表插入在候选键属性上取值为空的元组,观察系统反应;选取表中某些或某个元组,修改这些元组在候选键属性上的取值,或插入新元组,使这些元组与表中已有其它元组的候选键属性取值相同,观察系统反应; (选定tonghuadata表 主键为CellID 候选键为timee和Datee)

insert into

tonghuadata(CellID,traff,thtraff,rate,congsnum,callnum,callcongs,nTCH,Datee,Timee) values ('9011',1,1,1,1,1,1,1,NULL,NULL)

insert into

tonghuadata(CellID,traff,thtraff,rate,congsnum,callnum,callcongs,nTCH,Datee,Timee) values ('9011',1,1,1,1,1,1,1,'2094-06-04 00:00:00.000','2395-12-18 00:00:00.000')

7选取相互间定义了外键关联的一组表,分别在参照关系、被参照关系上,对表的主属性/外键属性作插入、删除、更新等操作,观察当1个表(如参照关系表、被参照关系表)在外键或主属性属性上的取值发生变化时,数据库管理系统对这些操作的反应,以及另外一个表(如被参照关系表、参照关系表)在主属性或外键属性上的取值的变化,并记录实验结果。

上述插入、删除、更新操作操作分为违反约束和不违反约束两种情况。 插入

参照关系不存在违反约束 可以直接插入Msc信息

被参照关系

违反约束(MscID为5214和5215,插入MscID不为该值会报错)

insert into Bsc(BscID,Bscname,Bscaltitude,Bsclatitude,Bsclongitude,Bsccompany,MscID) values('42','Hello',40,121.2,40.321,'Apple','2416')

不违反约束

insert into Bsc(BscID,Bscname,Bscaltitude,Bsclatitude,Bsclongitude,Bsccompany,MscID) values('42','Hello',40,121.2,40.321,'Apple','5214')

8 观察级联操作对外键约束的影响

1)对相互间定义了外键关联关系的一组表,分别使用 foreign key-references on delete cascade on update cascade on insert cascade 语句创建级联外键约束。

create table Bsc (

BscID char(256) not null, Bscname char(256) null, Bscaltitude float null, Bsclatitude float null, Bsclongitude float null, Bsccompany char(256) null, MscID char(256) null, primary key (BscID),

foreign key (MscID) references Msc on delete cascade on update cascade )

2) 分别在参照关系、被参照关系上,对表的主属性/外键属性作插入、删除、更新等操作,观察当1个表(如参照关系表、被参照关系表)在外键或主属性属性上的取值发生变化时,数据库管理系统对这些操作的反应,以及另外一个表(如被参照关系表、参照关系表)在主属性或外键属性上的取值的变化,并记录实验结果。 上述插入、删除、更新操作操作分为违反约束和不违反约束两种情况。

(当输入on insert cascade之后系统一直报错,无法检验插入后是否违背约束) 更新主属性 违反约束(无)

不违反约束 Msc更新的时候Bsc同时更新

update Msc set MscID=5244 where MscID=5214

更新外键属性

违反约束(Bsc更新的内容在Msc中不存在)

update Bsc set MscID=5244 where MscID=5214

不违反约束 (Bsc更新的内容在Msc中存在)

update Bsc set MscID='5215' where MscID=5214

删除主属性 违反约束(无) 不违反约束

delete from Msc where MscID=5214

Msc和对应的Bsc都删除