Главная Случайная страница


Категории:

ДомЗдоровьеЗоологияИнформатикаИскусствоИскусствоКомпьютерыКулинарияМаркетингМатематикаМедицинаМенеджментОбразованиеПедагогикаПитомцыПрограммированиеПроизводствоПромышленностьПсихологияРазноеРелигияСоциологияСпортСтатистикаТранспортФизикаФилософияФинансыХимияХоббиЭкологияЭкономикаЭлектроника






Проектирование и анализ структуры базы данных

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

В системе Delphi 7 имеется возможность представления структуры БД, используемой в проекте, в графическом виде. Реализуется она следующим образом. Прежде всего, надо перейти к окну редактора и в правой нижней части выбрать вкладку Diagram. Исходно панель пуста. Ее можно заполнять, перетаскивая объекты из окна дерева объектов.

Схема большой БД может быть представлена совокупностью диаграмм, показывающих отношения между отдельными таблицами. Новая диаграмма создается щелчком на кнопке New Diagram, ненужная диаграмма удаляется из схемы щелчком на кнопке Delete Diagram. Имя диаграммы вводится в окне Name, краткое описание диаграммы – в окне Description.

Переместим объект Naklad.DB из окна дерева объектов на панель Diagram. Этот объект наглядно представляется в виде таблицы со списком полей. Ключевое поле выделено полужирным шрифтом, виртуальные поля, не присутствующие в физической таблице, – курсивом. При проектировании отношений между элементами БД можно использовать примечания к различным объектам схемы. Блок примечаний добавляется щелчком на кнопке Comment Block с последующим щелчком на схеме. Появляется прямоугольник, в котором можно вводить произвольный текст. Затем надо щелкнуть на кнопке Allude Connector и протянуть линию от примечания к

 
 

нужному объекту (рис. 22).

Рис. 22. Наглядное представление НД с комментарием

 

 
 

Следующим переместим объект SourceNak (источник данных), и между НД и источником сразу же возникает связь (рис. 23).

Рис. 23. Связь между НД и источником данных

 

Если на основе существующего НД требуется создать новый источник данных, то, не обращаясь к инспектору объектов, это можно сделать следующим образом:

1. Разместить в модуле данных новый объект класса TDataSource и вернуться на панель Diagram.

2. Перетащить созданный объект из окна дерева объектов на правую панель (пока он не связан ни с каким НД).

3. Щелкнуть на кнопке Property Connector, после чего провести линию от НД до нового источника данных. Связь создастся при этом автоматически.

4. Для удаления связи, надо выделить ее при помощи мыши, после чего в контекстном меню выбрать пункт Remove.

 
 

Выше было показано, как связать два НД с помощью свойств MasterSource / MasterFields. Если к текущей схеме данных добавить НД Snakl при сохранении описанной связи, то на схеме у этого НД появятся две новые связи. Вторая связь, начинающаяся и заканчивающаяся значками в виде прямоугольников, описывает главный НД Naklad для подчиненного НД Snakl. Главный НД выделен более крупным прямоугольником (рис. 24).

Рис. 24. Создание связи между НД при помощи схемы данных

 

Удалим эту связь, выделив ее и выбрав в контекстном меню пункт Remove, а затем создадим снова. Для этого, щелкнув на кнопке Master / Detail connector, проведем линию при нажатой левой кнопке мыши от НД Naklad (главного) к НД Snakl (подчиненному). На экране появится описанное ранее диалоговое окно Field Link Designer (рис. 20), в котором указываются необходимые поля. Если теперь закрыть окно, на схеме появится связь, которую мы ранее удалили. В дальнейшем ее можно отредактировать, выделив мышью и выбрав в контекстном меню пункт Edit.

Кнопка Lookup Connector позволяет показать в проектируемой БД связи по полям соответствия. Эти связи со значком в виде «глаза» указывают, из какого НД подставляются значения. Эти связи нельзя редактировать, их можно лишь удалять и создавать заново. Для установки связи необходимо, щелкнув на кнопке Lookup Connector, протянуть линию от НД, в котором имеются поля соответствия, к подстановочному НД. Возникнет диалоговое окно (рис. 21), в котором определяется новое поле соответствия. Однако практика показывает, что этот способ создания связей реально не работает.

С помощью кнопки Allude Connector можно представлять в виде стрелок дополнительные взаимосвязи между объектами схемы без всяких ограничений. При этом с помощью пунктов контекстного меню Start with и End with для каждой связи можно формировать оригинальный вид, задавая разную форму начальной и конечной областей линии связи.

Для каждой связи и любого объекта схемы данных имеется возможность выбрать оригинальные цвета. Объект можно также переместить на передний план схемы с помощью пункта Bring to front из контекстного меню, если таблица закрыта другими объектами. Переместить объект на задний план позволяет команда контекстного меню Send to back. Допустимо также изменение размеров и положения любых элементов схемы данных, в том числе подписей у связей.

 
 

Руководствуясь представленными методиками, создадим схемы связей НД демонстрационной базы данных так, как это показано на рис. 25 – 30.

Рис. 25. Связь НД Naklad и Snakl по ключевому полю

 
 

Рис. 26. Связь НД Naklad и Zakazcik по подстановочным полям

 
 

Рис. 27. Связь НД Snakl и Izdelie по подстановочным полям

 
 

 
 

Рис. 28. Связь НД Plateg и Splat по ключевым полям

 

Рис. 29. Связь НД Plateg и Zakazcik по подстановочным полям

 
 

Рис. 30. Связь НД Splat и Izdelie по подстановочным полям

 

Создание объектов-столбцов

После того как мы создали подстановочные поля для НД Naklad и Snakl, Plateg и Splat, связанные с ними ключевые поля NZKod и SnIKod, PZKod и SpIKod стали лишними – не имеет смысла рядом с названием заказчика или изделия показывать соответствующий код. В то же время удалить связанные с ними объекты-поля NakladNZKod и SnaklSnIKod, PlategNZKod и SplatSpIKod нельзя, так как НД лишится ключевого поля и подстановочная связь будет разрушена.

Можно для объектов-полей поместить значения False в их свойства Visible и тем самым не показывать их в компоненте отображения данных DBGrid. Однако «спрятанные» поля не будут видны не только в сетке, но и в любом другом визуализирующем компоненте Delphi (компоненты на вкладке Data Controls), что затруднит редактирование и ввод данных.

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

 
 


ВНИМАНИЕ! Объекты-столбцы будут созданы на этапе проектирования рабочих форм приложения, работающего с БД (см. п. 5.3).

 
 


Реализация бизнес-правил

В приложении, работающем с БД, обязательно должен быть реализован комплекс бизнес-правил. Бизнес-правила определяют реакцию системы на добавление, изменение или удаление данных, обеспечивая непротиворечивость и ссылочную целостность БД. Если, например, мы удалим запись из списка изделий какой-либо накладной, программа должна автоматически изменить сумму в соответствующей накладной, иначе мы получим недостоверную накладную. Такая реакция программы и есть бизнес-правило удаления изделий.

Бизнес-правила разрабатываются на основе тщательного изучения автоматизируемой области человеческой деятельности. Для файл-серверных систем они обычно реализуются в комплексе обработчиков событий AfterXXXXBeforeXXXX компонентов-наборов данных Table или Query.

В клиент-серверных системах эти действия, как правило, реализуются на сервере БД с помощью триггеров – процедур, которые автоматически запускаются при вставке, изменении или удалении записей.

Рассмотрим небольшой пример, реализующий часть бизнес-правил, связанных с удалением данных о накладной. Перед удалением накладной надо удалить список связанных с ней изделий, иначе в таблице Snakl появятся записи, которые ссылаются на несуществующую запись в таблице Naklad.

Наиболее подходящим местом для реализации этого бизнес-правила является обработчик события BeforeDelete набора данных Naklad. Это событие автоматически генерируется перед удалением записи. Перейдем к форме модуля данных, щелкнем на НД Naklad в правой панели модуля и дважды щелкнем в строке события BeforeDelete в окне инспектора объектов. Создадим такой обработчик:

procedure TDM.NakladBeforeDelete(DataSet: TDataSet);

begin

while not Snakl.Eof do

Snakl.Delete;

end;

В обработчике учитывается то обстоятельство, что НД Snakl связан с текущей записью НД Naklad отношением один-ко-многим и, следовательно, содержит данные только по тем изделиям, которые относятся к удаляемой накладной.

Аналогичным образом (с помощью обработчика BeforeDelete НД Plateg) реализуются бизнес-правила, связанные с удалением информации об оплаченных изделиях при удалении платежного требования.

procedure TDM.PlategBeforeDelete(DataSet: TDataSet);

begin

while not Splat.Eof do

Splat.Delete;

end;

 

 

Последнее изменение этой страницы: 2016-08-28

lectmania.ru. Все права принадлежат авторам данных материалов. В случае нарушения авторского права напишите нам сюда...