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

Содержание



Задание

Введение

Создание логической модели

Создание физической модели

Схема данных в SQL

Заключение

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

Приложение




Задание



Предметная область "Учебная точка" "Аудитория"








Введение



ERwin - это графический инструментарий для моделирования данных, основной целью которого является помощь аналитику в использовании бизнес-правил и требований к информации при создании логических и физических моделей данных. Процесс моделирования в Erwin базируется на методологии проектирования реляционных баз данных- IDEF1X. Она определяет стандарты терминологии и графического изображения типовых элементов на ER-диаграммах.

	Обычно разработка модели базы данных состоит из двух этапов: составление логической модели и создание на ее основе физической модели. ERwin полностью поддерживает такой процесс, он имеет два представления модели: логическое (logical) и физическое (physical). Таким образом, разработчик может строить логическую модель базы данных, не задумываясь над деталями физической реализации, т.е. уделяя основное внимание требованиям к информации и бизнес-процессам, которые будет поддерживать будущая база данных. ERwin не только имеет очень удобный пользовательский интерфейс, позволяющий представить базу данных в самых различных аспектах, но и поддерживает автоматическую генерацию спроектированной и определенной на физическом уровне структуры данных. При создании новой модели выбирается сервер СУБД. Выбранный сервер определяет физический уровень представления модели. Для того, чтобы переключится на физический уровень модели, нужно выбрать кнопку Phisical/Logical на панели инструментов.




1. Создание логической модели



Логическая модель данных является визуальным представлением структур данных, их атрибутов и бизнес-правил. На нем данные представляются так, как выглядят в реальном мире, и могут называться так, как они называются в реальном мире. Логическая модель представляет данные таким образом, чтобы они легко воспринимались. С точки зрения пользователя Erwin, процесс создания логической модели данных заключается в визуальном редактировании ER-диаграммы. Диаграмма Erwin строится из трех основных блоков: сущностей, атрибутов и связей.Логическая модель данных может быть построена на основе другой логической модели, например на основе модели процессов. Проектирование логической модели свободно от требований платформы и языка реализации или способа дальнейшего использования данных. Разработчик модели использует требования к данным и результаты анализа для формирования логической модели данных. Разработчик приводит логическую модель к третьей нормальной.

Первичный ключ (primary key) — это атрибут или группа атрибутов, однозначно идентифицирующая экземпляр сущности, атрибуты первичного ключа на диаграмме не требуют специального обозначения — это те атрибуты, которые находятся в списке атрибутов выше горизонтальной линии. Ключи могут быть сложными, т.е. содержащими несколько атрибутов.

Первичные ключи предметной области "Учебная точка":

-сущность "Аудитория"- № аудитории;

-сущность "Учебная группа"- № группы;

-в сущности "Расписание" составной первичный ключ - № аудитории и № группы.

В одной сущности могут оказаться несколько атрибутов или наборов атрибутов, претендующих на роль первичного ключа. Такие претенденты называются потенциальными ключами (candidate key).

Внешним ключом (foreign key) называется поле таблицы, предназначенное для хранения значения первичного ключа другой таблицы с целью организации связи между этими таблицами.

В предмотной области "Учебная точка" имеются внешние ключи (№ аудитории и № группы) в сущности "Расписание".

Процесс нормализации состоит в том, чтобы представить данные в виде набора таблиц, в которых все неключевые поля зависят только от целого - возможно, составного - ключа. Тем самым минимизируется избыточность данных, и ограничиваются несвязанные структуры. Известно пять нормальных форм, однако на практике используются только первые три.

Первая нормальная форма

Говорят, что сущность соответствует первой нормальной форме, если в каждом поле каждой ее строки содержится ровно одно значение.

Вторая нормальная форма

Сущность соответствует второй нормальной форме, если она отвечает критерию первой нормальной формы, а значения ее любого неключевого поля зависят от значений всех ключевых полей. Таким образом, если в сущности некоторое поле содержит значение, представляющее собой факт относительно подмножества ключевых полей, то сущность не соответствует второй нормальной форме.

Третья нормальная форма

Значение каждого неключевого поля сущности в третьей нормальной форме должно представлять собой факт, не зависящий от значений никаких других неключевых полей. Кроме того, сущность должна соответствовать правилу второй нормальной формы.

Все сущности предметной области "Учебная точка" отвечают требованиям 3 нормальных форм.

Связующая сущность- сущность, созданная для преобразования отношений типа многие-ко-многим между двумя сущностями в отношения типа один-ко-многим. Она содержит первичные ключи обеих таблиц. В предметной области "Учебная точка" связующей является сущность "Расписание".

Логическая модель предметной области "Учебная точка":







2. Создание физической модели



Физическая модель данных, напротив, зависит от конкретной СУБД, фактически являясь отображением системного каталога БД. Создание модели данных, как правило, начинается с создания логической модели. После описания логической модели, проектировщик может выбрать необходимую СУБД и ERwin автоматически создаст соответствующую физическую модель. В физической модели содержится информация о всех объектах БД. Поскольку стандартов на объекты БД не существует (например, нет стандарта на типы данных), физическая модель зависит от конкретной реализации СУБД. Следовательно, одной и той же логической модели могут соответствовать несколько разных физических моделей. Если в логической модели не имеет значения, какой конкретно тип данных имеет атрибут, то в физической модели важно описать всю информацию о конкретных физических объектах - таблицах, столбцах и отношениях. Сущности логической модели, вероятно, станут таблицами в физической модели. Логические атрибуты станут столбцами. Логические отношения станут ограничениями целостности связей. Некоторые логические отношения невозможно реализовать в физической базе данных.

На основе физической модели ERwin может сгенерировать системный каталог СУБД или соответствующий SQL-скрипт. Этот процесс называется прямым проектированием (Forward Engineering). Для выполнения прямого проектирования служит меню Tool/ Forward Engineering/Schema Generation. Тем самым достигается масштабируемость - создав одну логическую модель данных, можно сгенерировать физические модели под любую поддерживаемую ERwin СУБД. С другой стороны, ERwin способен по содержимому системного каталога или SQL-скрипту воссоздать физическую и логическую модель данных (Reverse Engineering). На основе полученной логической модели данных можно сгенерировать физическую модель для другой СУБД и затем сгенерировать ее системный каталог. Следовательно, ERwin позволяет решить задачу по переносу структуры данных с одного сервера на другой.

	ERwin поддерживает большинство ведущих наиболее популярных реляционных СУБД, а также настольные системы: Access, Microsoft SQL Server, Oracle, FoxPro, dBase, Clipper , Paradox и многие другие. При смене СУБД ERwin автоматически преобразует одну физическую модель в другую. В окне Target Server можно выбрать новый сервер СУБД. Сервер СУБД можно изменить при помощи пункта меню Database/Choose Database.

Физическая модель предметной области "Учебная точка":








3. Схема данных в SQL








Заключение



Под термином CASE (Computer Aided Software Engineering) понимаются программные средства, поддерживающие процессы создания и сопровождения АС, включая анализ и формулировку требований, проектирование прикладного программного обеспечения и баз данных, генерацию кода, тестирование, документирование, обеспечение качества, конфигурационное управление и управление проектом, а также другие процессы. CASE-средства вместе с системным программным обеспечением и техническими средствами образуют полную среду разработки АС.

Возрастающая сложность современных автоматизированных систем управления и повышение требовательности к ним обуславливает применение эффективных технологий создания и сопровождения АС в течение всего жизненного цикла. Такие технологии, базирующиеся на методологиях подготовки информационных систем и соответствующих комплексах интегрированных инструментальных средств, а также ориентированные на поддержку полного жизненного цикла АС или его основных этапов, получили название CASE-технологий и CASE-средств.

Для успешной реализации проекта АС должны быть построены полные и непротиворечивые функциональные и информационные модели системы управления. Накопленный опыт проектирования указанных моделей показывает, что это логически сложная, трудоемкая и длительная по времени работа, требующая высокой квалификации участвующих в ней специалистов.

Однако во многих случаях проектирование АС выполняется в основном на интуитивном уровне с применением неформальных методов, основанных на искусстве, практическом опыте и экспертных оценках.

Кроме того, в процессе создания и функционирования АС информационные потребности пользователей могут изменяться или уточняться, что еще более усложняет разработку и сопровождение автоматизированных систем управления. От перечисленных недостатков в наибольшей степени свободны подходы, основанные на программно-технических средствах специального класса - CASE-средствах, реализующих CASE-технологии создания и сопровождения АС.




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



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

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

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

Хоторн Роб "Разработка баз данных, Micrososoft SQL Server 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