Список используемой литературы
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