Смекни!
smekni.com

Разработка серверной части базы данных с применением CASE-технологий (стр. 2 из 2)


Список используемой литературы

1) Маклаков С.В. CASE-средства разработки информационных систем. BPwin и Erwin –М.: ДиалогМифи, 2001.

2) Горин С.В., Тандоев А.Ю. Применение CASE-средства Erwin 2.0 для информационного моделирования в системах обработки данных. "СУБД", 1995, №3.

3) Панащук С.А. Разработка информационных систем с использованием CASE-систем. "СУБД", 1995, №3.

4) Хоторн Роб "Разработка баз данных, MicrososoftSQLServer 2000".-Вильямс, 2001


Приложение

Код физической модели

CREATE TABLE Аудитория

( Номер_аудиторииvarchar(20) NOT NULL ,

Площадь_в_кв_м integer NULL ,

Категория_аудитории varchar(20) NULL ,

Количество_мест integer NULL ,

Год_последнего_ремонта datetime NULL )

go

ALTER TABLE Аудитория

ADD CONSTRAINT XPKАудитория PRIMARY KEY CLUSTERED (Номер_аудиторииASC)

go

CREATE TABLE Расписание

(

Номер_аудиторииvarchar(20) NOT NULL ,

Номер_группыvarchar(20) NOT NULL ,

Датаdatetime NULL ,

Времяdatetime NULL ,

Наименование_дисциплиныvarchar(20) NULL

)

go

ALTER TABLE Расписание

ADD CONSTRAINT XPKРасписание PRIMARY KEY CLUSTERED (Номер_аудиторииASC,Номер_группыASC)

go

CREATE TABLE Учебная_группа

(

Номер_группыvarchar(20) NOT NULL ,

Специальностьvarchar(20) NULL ,

Курсinteger NULL ,

Факультетvarchar(20) NULL

)

go

ALTER TABLE Учебная_группа

ADD CONSTRAINT XPKУчебная_группа PRIMARY KEY CLUSTERED (Номер_группыASC)

go

ALTER TABLE Расписание

ADD CONSTRAINT R_4 FOREIGN KEY (Номер_аудитории) REFERENCES Аудитория(Номер_аудитории)

ON DELETE NO ACTION

ON UPDATE NO ACTION

go

ALTER TABLE Расписание

ADD CONSTRAINT R_5 FOREIGN KEY (Номер_группы) REFERENCES Учебная_группа(Номер_группы)

ON DELETE NO ACTION

ON UPDATE NO ACTION

go

CREATE TRIGGER tD_Аудитория ON Аудитория FOR DELETE AS

/* ERwin Builtin 24 июня 2010 г. 9:55:32 */

/* DELETE trigger on Аудитория */

BEGIN

DECLARE @errno int,

@errmsg varchar(255)

/* ERwin Builtin 24 июня 2010 г. 9:55:32 */

/* Аудитория R/4 Расписание on parent delete no action */

/* ERWIN_RELATION:CHECKSUM="00010257", PARENT_OWNER="", PARENT_TABLE="Аудитория"

CHILD_OWNER="", CHILD_TABLE="Расписание"

P2C_VERB_PHRASE="R/4", C2P_VERB_PHRASE="",

FK_CONSTRAINT="R_4", FK_COLUMNS="Номер_аудитории" */

IF EXISTS (

SELECT * FROM deleted,Расписание

WHERE

/* %JoinFKPK(Расписание,deleted," = "," AND") */

Расписание.Номер_аудитории = deleted.Номер_аудитории

)

BEGIN

SELECT @errno = 30001,

@errmsg = 'Cannot delete Аудитория because Расписание exists.'

GOTO ERROR

END

/* ERwin Builtin 24 июня 2010 г. 9:55:32 */

RETURN

ERROR:

raiserror @errno @errmsg

rollback transaction

END

go

CREATE TRIGGER tU_Аудитория ON Аудитория FOR UPDATE AS

/* ERwin Builtin 24 июня 2010 г. 9:55:32 */

/* UPDATE trigger on Аудитория */

BEGIN

DECLARE @NUMROWS int,

@nullcnt int,

@validcnt int,

@insНомер_аудитории varchar(20),

@errno int,

@errmsg varchar(255)

SELECT @NUMROWS = @@rowcount

/* ERwin Builtin 24 июня 2010 г. 9:55:32 */

/* Аудитория R/4 Расписание on parent update no action */

/* ERWIN_RELATION:CHECKSUM="0001242d", PARENT_OWNER="", PARENT_TABLE="Аудитория"

CHILD_OWNER="", CHILD_TABLE="Расписание"

P2C_VERB_PHRASE="R/4", C2P_VERB_PHRASE="",

FK_CONSTRAINT="R_4", FK_COLUMNS="Номер_аудитории" */

IF

/* %ParentPK(" OR",UPDATE) */

UPDATE(Номер_аудитории)

BEGIN

IF EXISTS (

SELECT * FROM deleted,Расписание

WHERE

/* %JoinFKPK(Расписание,deleted," = "," AND") */

Расписание.Номер_аудитории = deleted.Номер_аудитории

)

BEGIN

SELECT @errno = 30005,

@errmsg = 'Cannot update Аудитория because Расписание exists.'

GOTO ERROR

END

END

/* ERwin Builtin 24 июня 2010 г. 9:55:32 */

RETURN

ERROR:

raiserror @errno @errmsg

rollback transaction

END

go

CREATE TRIGGER tD_Расписание ON Расписание FOR DELETE AS

/* ERwin Builtin 24 июня 2010 г. 9:55:32 */

/* DELETE trigger on Расписание */

BEGIN

DECLARE @errno int,

@errmsg varchar(255)

/* ERwin Builtin 24 июня 2010 г. 9:55:32 */

/* Аудитория R/4 Расписание on child delete no action */

/* ERWIN_RELATION:CHECKSUM="000294c9", PARENT_OWNER="", PARENT_TABLE="Аудитория"

CHILD_OWNER="", CHILD_TABLE="Расписание"

P2C_VERB_PHRASE="R/4", C2P_VERB_PHRASE="",

FK_CONSTRAINT="R_4", FK_COLUMNS="Номер_аудитории" */

IF EXISTS (SELECT * FROM deleted,Аудитория

WHERE

/* %JoinFKPK(deleted,Аудитория," = "," AND") */

deleted.Номер_аудитории = Аудитория.Номер_аудитории AND

NOT EXISTS (

SELECT * FROM Расписание

WHERE

/* %JoinFKPK(Расписание,Аудитория," = "," AND") */

Расписание.Номер_аудитории = Аудитория.Номер_аудитории

)

)

BEGIN

SELECT @errno = 30010,

@errmsg = 'Cannot delete last Расписание because Аудитория exists.'

GOTO ERROR

END

/* ERwin Builtin 24 июня 2010 г. 9:55:32 */

/* Учебная_группа R/5 Расписание on child delete no action */

/* ERWIN_RELATION:CHECKSUM="00000000", PARENT_OWNER="", PARENT_TABLE="Учебная_группа"

CHILD_OWNER="", CHILD_TABLE="Расписание"

P2C_VERB_PHRASE="R/5", C2P_VERB_PHRASE="",

FK_CONSTRAINT="R_5", FK_COLUMNS="Номер_группы" */

IF EXISTS (SELECT * FROM deleted,Учебная_группа

WHERE

/* %JoinFKPK(deleted,Учебная_группа," = "," AND") */

deleted.Номер_группы = Учебная_группа.Номер_группы AND

NOT EXISTS (

SELECT * FROM Расписание

WHERE

/* %JoinFKPK(Расписание,Учебная_группа," = "," AND") */

Расписание.Номер_группы = Учебная_группа.Номер_группы

)

)

BEGIN

SELECT @errno = 30010,

@errmsg = 'Cannot delete last Расписание because Учебная_группа exists.'

GOTO ERROR

END

/* ERwin Builtin 24 июня 2010 г. 9:55:32 */

RETURN

ERROR:

raiserror @errno @errmsg

rollback transaction

END

go

CREATE TRIGGER tU_Расписание ON Расписание FOR UPDATE AS

/* ERwin Builtin 24 июня 2010 г. 9:55:32 */

/* UPDATE trigger on Расписание */

BEGIN

DECLARE @NUMROWS int,

@nullcnt int,

@validcnt int,

@insНомер_аудитории varchar(20),

@insНомер_группы varchar(20),

@errno int,

@errmsg varchar(255)

SELECT @NUMROWS = @@rowcount

/* ERwin Builtin 24 июня 2010 г. 9:55:32 */

/* Аудитория R/4 Расписание on child update no action */

/* ERWIN_RELATION:CHECKSUM="0002b717", PARENT_OWNER="", PARENT_TABLE="Аудитория"

CHILD_OWNER="", CHILD_TABLE="Расписание"

P2C_VERB_PHRASE="R/4", C2P_VERB_PHRASE="",

FK_CONSTRAINT="R_4", FK_COLUMNS="Номер_аудитории" */

IF

/* %ChildFK(" OR",UPDATE) */

UPDATE(Номер_аудитории)

BEGIN

SELECT @nullcnt = 0

SELECT @validcnt = count(*)

FROM inserted,Аудитория

WHERE

/* %JoinFKPK(inserted,Аудитория) */

inserted.Номер_аудитории = Аудитория.Номер_аудитории

/* %NotnullFK(inserted," IS NULL","select @nullcnt = count(*) from inserted where"," AND") */

IF @validcnt + @nullcnt != @NUMROWS

BEGIN

SELECT @errno = 30007,

@errmsg = 'Cannot update Расписание because Аудитория does not exist.'

GOTO ERROR

END

END

/* ERwin Builtin 24 июня 2010 г. 9:55:32 */

/* Учебная_группа R/5 Расписание on child update no action */

/* ERWIN_RELATION:CHECKSUM="00000000", PARENT_OWNER="", PARENT_TABLE="Учебная_группа"

CHILD_OWNER="", CHILD_TABLE="Расписание"

P2C_VERB_PHRASE="R/5", C2P_VERB_PHRASE="",

FK_CONSTRAINT="R_5", FK_COLUMNS="Номер_группы" */

IF

/* %ChildFK(" OR",UPDATE) */

UPDATE(Номер_группы)

BEGIN

SELECT @nullcnt = 0

SELECT @validcnt = count(*)

FROM inserted,Учебная_группа

WHERE

/* %JoinFKPK(inserted,Учебная_группа) */

inserted.Номер_группы = Учебная_группа.Номер_группы

/* %NotnullFK(inserted," IS NULL","select @nullcnt = count(*) from inserted where"," AND") */

IF @validcnt + @nullcnt != @NUMROWS

BEGIN

SELECT @errno = 30007,

@errmsg = 'Cannot update Расписание because Учебная_группа does not exist.'

GOTO ERROR

END

END

/* ERwin Builtin 24 июня 2010 г. 9:55:32 */

RETURN

ERROR:

raiserror @errno @errmsg

rollback transaction

END

go

CREATE TRIGGER tD_Учебная_группа ON Учебная_группа FOR DELETE AS

/* ERwin Builtin 24 июня 2010 г. 9:55:32 */

/* DELETE trigger on Учебная_группа */

BEGIN

DECLARE @errno int,

@errmsg varchar(255)

/* ERwin Builtin 24 июня 2010 г. 9:55:32 */

/* Учебная_группа R/5 Расписание on parent delete no action */

/* ERWIN_RELATION:CHECKSUM="000102de", PARENT_OWNER="", PARENT_TABLE="Учебная_группа"

CHILD_OWNER="", CHILD_TABLE="Расписание"

P2C_VERB_PHRASE="R/5", C2P_VERB_PHRASE="",

FK_CONSTRAINT="R_5", FK_COLUMNS="Номер_группы" */

IF EXISTS (

SELECT * FROM deleted,Расписание

WHERE

/* %JoinFKPK(Расписание,deleted," = "," AND") */

Расписание.Номер_группы = deleted.Номер_группы)

BEGIN

SELECT @errno = 30001,

@errmsg = 'Cannot delete Учебная_группа because Расписание exists.'

GOTO ERROR

END

/* ERwin Builtin 24 июня 2010 г. 9:55:32 */

RETURN

ERROR:

raiserror @errno @errmsg

rollback transaction

END

go

CREATE TRIGGER tU_Учебная_группа ON Учебная_группа FOR UPDATE AS

/* ERwin Builtin 24 июня 2010 г. 9:55:32 */

/* UPDATE trigger on Учебная_группа */

BEGIN

DECLARE @NUMROWS int,

@nullcnt int,

@validcnt int,

@insНомер_группы varchar(20),

@errno int,

@errmsg varchar(255)

SELECT @NUMROWS = @@rowcount

/* ERwin Builtin 24 июня 2010 г. 9:55:32 */

/* Учебная_группа R/5 Расписание on parent update no action */

/* ERWIN_RELATION : CHECKSUM = "00011854" , PARENT_OWNER="", PARENT_TABLE="Учебная_группа"

CHILD_OWNER="", CHILD_TABLE="Расписание"

P2C_VERB_PHRASE="R/5", C2P_VERB_PHRASE="",

FK_CONSTRAINT="R_5", FK_COLUMNS="Номер_группы" */

IF

/* %ParentPK(" OR",UPDATE) */

UPDATE(Номер_группы)

BEGIN

IF EXISTS (

SELECT * FROM deleted,Расписание

WHERE

/* %JoinFKPK(Расписание,deleted," = "," AND") */

Расписание.Номер_группы = deleted.Номер_группы

)

BEGIN

SELECT @errno = 30005,

@errmsg = 'Cannot update Учебная_группа because Расписание exists.'

GOTO ERROR

END

END

/* ERwin Builtin 24 июня 2010 г. 9:55:32 */

RETURN

ERROR:

raiserror @errno @errmsg

rollback transaction

END

go