с реляционными базами данных 4 глава




□ Признак команды

□ Время гола

Таблицы связаны по полю "Код матча", которое для таблицы матча имеет уни­кальное значение. Чтобы обеспечить уникальность записей таблицы голов, в нее введено ключевое поле "Код гола".

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

Требования третьей нормальной формы:

П таблица должна удовлетворять требованиям второй нормальной формы;

□ ни одно из не ключевых полей не должно однозначно идентифицироваться
значением другого не ключевого поля (полей).

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


50


Часть I. Основы работы с базами данных


что в течение сезона у команды тренер не меняется, на практике это часто не выполняется, но не относится к сути рассматриваемого вопроса.) Разобьем таб­лицу матчей на две таблицы: одну с данными о матчах и вторую — с данными о командах. Их структура будет такой:

Таблица матчей:

□ Код матча (уникальный ключ)

□ Дата матча

□ Код команды хозяев

□ Код команды гостей Таблица команд:

□ Код команды (уникальный ключ)

□ Название команды

□ Город команды

□ Фамилия тренера команды

Информация о команде хранится в строковых полях, которые имеют достаточно большой размер — в нашем случае приблизительно 60 символов. На практике о каждой команде необходимо запоминать больше данных, чем просто ее назва­ние, город приписки и фамилия тренера, что существенно увеличивает объем информации. Поэтому для уменьшения размера записей таблицы матчей не только фамилия тренера, но и вся подробная информация о командах вынесена в таблицу команд. Вместо этого команды хозяев и гостей в таблице матчей идентифицируются кодом команды, который является уникальным ключевым значением в таблице команд.

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

Следование требованиям нормализованных форм не всегда является обязатель­ным. Как уже отмечалось, с ростом числа таблиц структура БД усложняется и возрастает время доступа к данным. В ряде случаев для упрощения структуры БД можно позволить частичное дублирование данных, не допуская, однако, на­рушения их целостности и сохраняя их непротиворечивость.

В рассмотренной БД это относится, например, к информации о счете матча. Чтобы исключить дублирование данных, для него не отведено отдельное поле. Узнать счет матча можно с помощью двух запросов к БД, возвращающих число мячей, забитых в указанном матче хозяевами и гостями соответственно. Запрос может иметь следующий вид:

SELECT COUNT(GJDwnerSign) FROM Goal

WHERE Goal.G_Match =:MatchCode

AND Goal.G_OwnerSign =:OwnerSign


Глава 3. Проектирование баз данных


51



Номер матча и признак команды, игрок которой забил гол, передаются в запрос через параметры MatchCode и OwnerSign.

Рис. 3.1. Структура БД "Чемпионат по футболу"

Поскольку процесс обработки данных усложнился, а время доступа к ним возросло, возможным вариантом для структуры рассмотренной БД является такой, когда счет матча запоминается в отдельном поле таблицы матчей. При этом необходимо обеспечить целостность данных при изменении БД с учетом того факта, что часть ее данных дублирована.

Средства CASE

В предыдущем разделе проектирование БД выполнено вручную. Разработчик сам осуществляет такие операции, как определение состава полей, распределе­ние их по таблицам, а также установление связей между таблицами. Ручное проектирование применяется для разработки БД самого различного назначения и для относительно небольших БД вполне приемлемо. Однако с ростом размера базы данных, когда в нее включаются от нескольких десятков до сотен различ­ных таблиц, возникает проблема сложности организации данных, в том числе установления взаимосвязей между таблицами. Для облегчения решения этой проблемы предназначены системы автоматизации разработки приложений, или средства CASE (Computer Aided Software Engineering).

Средства CASE представляют собой программы, поддерживающие процессы создания и/или сопровождения информационных систем, такие как анализ и


52


Часть I. Основы работы с базами данных


формулировка требований, проектирование БД и приложений, генерация кода, тестирование, обеспечение качества, управление конфигурацией и проектом. То есть средства CASE позволяют решать более масштабные задачи, чем просто проектирование БД. Кстати, согласно предлагаемой ниже классификации, сис­тема Delphi также относится к типу CASE, т. к. позволяет автоматизировать раз­работку приложений.

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

Классификация средств (систем) CASE, используемых для разработки баз дан­ных, производится по следующим признакам:

□ ориентация на этапы жизненного цикла;

□ функциональная полнота;

□ тип используемых моделей;

□ степень независимости от СУБД;

□ платформа.

По ориентации на этапы жизненного цикла можно выделить следующие основ­ные типы систем CASE (в скобках приведены названия фирм-разработчиков):

□ системы анализа, предназначенные для построения и анализа моделей пред­метной области, например, Design/IDEF (Meta Software) и BPWin (Logic Works);

□ системы анализа и проектирования, поддерживающие и обеспечивающие создание проектных спецификаций, например, Vantage Team Builder (Cayen­ne), Silverrun (Silverrun Technologies), PRO-I (McDonnell Douglas);

□ системы проектирования БД, обеспечивающие моделирование данных и раз­работку схем баз данных для основных СУБД, например, ERwin (Logic Works), SDesigner (SPD), DataBase Designer (Oracle);

□ системы разработки приложений, например, Uniface (Compuware), JAM (JYACC), PowerBuilder (Sybase), Developer/2000 (Oracle), New Era (Informix), SQL Windows (Centura), Delphi (Borland).

По функциональной полноте системы CASE условно делятся на следующие группы:

□ системы, предназначенные для решения частных задач на одном или нескольких этапах жизненного цикла, например, ERwin (Logic Works), S-Designer (SPD), СА8Е.Аналитик (МакроПроджект) и Silverrun (Silverrun Technologies);

□ интегрированные системы, поддерживающие весь жизненный цикл инфор­мационной системы и связанные с общим репозиторием (хранилищем), на­пример, система Vantage Team Builder (Cayenne) и система Designer/2000 с системой разработки приложений Developer/2000 (Oracle).


Глава 3. Проектирование баз данных


53


По типу используемых моделей системы CASE делятся на три разновидности: структурные, объектно-ориентированные и комбинированные.

Исторически первыми появились структурные системы CASE, которые основываются на методах структурного и модульного программирования, структурного анализа и синтеза, например, Vantage Team Builder (Cayenne).

Объектно-ориентированные системы CASE получили массовое распространение с начала 90-х годов XX века. Они позволяют сократить сроки разработки, а так­же повысить надежность и эффективность функционирования информационной системы. Примерами объектно-ориентированных систем CASE являются Rational Rose (Rational Software) и Object Team (Cayenne).

Комбинированные системы CASE поддерживают одновременно и структурное, и объектно-ориентированное программирование, например, Designer/2000 (Oracle).

По степени независимости от СУБД системы CASE делятся на две группы:

□ независимые системы;

□ встроенные в СУБД системы.

Независимые системы CASE поставляются в виде автономных систем, не вхо­дящих в состав конкретной СУБД. Обычно они поддерживают несколько фор­матов баз данных через интерфейс ODBC. К числу независимых систем отно­сятся SDesigner (SDP, Powersoft), ERwin (LogicWorks), Silverrun (Silverrun Technologies).

Встроенные системы CASE обычно поддерживают главным образом формат ба­зы данных, в состав системы управления которой они входят. При этом воз­можна поддержка форматов и других баз данных. Примером встроенной систе­мы является система Designer/2000, входящая в состав СУБД Oracle.

Платформа определяет компьютер и операционную систему, на которых допус­кается использовать продукт, созданный с помощью данной системы CASE.

Перечислим средства CASE, которые можно применять при разработке БД и приложений с помощью Delphi.

□ ModelMaker — продукт, поставляемый вместе с Delphi 7. Служит для разработки классов и пакетов компонентов для Delphi. Представляет собой CASE-средство, ориентированное на генерацию кода Delphi. Позволяет хранить и обслуживать отношения между классами и их членами, поддерживает построение UML-диаграмм. По сравнению с другими генераторами кода ModelMaker позволяет разрабатывать сложные проекты.

□ Data Module Designer — позволяет проектировать БД с таблицами формата Paradox. Программа обеспечивает достаточно удобный и наглядный интер­фейс. Структура БД, в том числе связи между таблицами, отображается в графическом виде.


54


Часть I. Основы работы с базами данных


П Cadet — независимый продукт, позволяющий проектировать БД с таблицами форматов dBase, Paradox и InterBase. С учетом того, что указанные форматы являются родными для Delphi, программу Cadet удобно использовать при разработке информационных систем.

Программы Data Module Designer и Cadet предназначены для моделирования структур данных и автоматизации проектирования БД. Возможности, предос­тавляемые этими средствами, меньше, чем возможности таких мощных систем, как, например, Sdesigner, однако доступность делает их привлекательными для использования. Так, программа Cadet является условно бесплатной, a Data Module Designer входит в состав СУБД Paradox 7.O. Впрочем, с появлением ModelMaker использование других CASE-средств может не потребоваться.



Глава 4


Технология создания информационной системы

Продемонстрируем возможности Delphi по работе с БД на примере создания простой информационной системы. Эту информационную систему можно раз­работать даже без написания кода: все необходимые операции выполняются с помощью программы Database Desktop, Конструктора формы и Инспектора объектов. Работа над информационной системой состоит из следующих основ­ных этапов:

□ создание БД;

□ создание приложения.

В простейшем случае БД состоит из одной таблицы. Если таблицы уже имеются, то первый этап не выполняется. Отметим, что совместно с Delphi поставляется большое количество примеров приложений, в том числе и приложений БД. Файлы таблиц для этих приложений находятся в каталоге c:\Program Files\ Common Files\Borland Shared\Data. Готовые таблицы также можно использовать для своих приложений.

Создание таблиц базы данных

Для работы с таблицами БД при проектировании приложения удобно использо­вать программу Database Desktop, которая позволяет:

□ создавать таблицы;

□ изменять структуры;

□ редактировать записи.

Кроме того, с помощью Database Desktop можно выполнять и другие действия над БД (создание, редактирование и выполнение визуальных и SQL-запросов,


56


Часть I. Основы работы с базами данных


операции с псевдонимами), которые будут рассматриваться позже (в главе, по­священной инструментам).

(_____ ЗамечаниеJ

Почти все рассматриваемые далее действия по управлению структурой таблицы можно выполнить также программно, что описано в главах 7 и 8, посвященных нави­гационному и реляционному способам доступа.

Процесс создания новой таблицы начинается с вызова команды File\New\Table (Файл\Новая\Таблица) и происходит в интерактивном режиме. При этом разра­ботчик должен:

□ выбрать формат (тип) таблицы;

□ задать структуру таблицы.

В начале создания новой таблицы в окне Create Table (Создание таблицы) (рис. 4.1) выбирается ее формат. По умолчанию предлагается формат таблицы Paradox версии 7, который мы и будем использовать. Для таблиц других форматов, например, dBase IV, действия по созданию таблицы практически не отличаются.

После выбора формата таблицы появляется окно определения структуры табли­цы (рис. 4.2), в котором выполняются следующие действия:

□ описание полей;

□ задание ключа;

□ задание индексов;

□ определение ограничений на значения полей;

□ определение условий (ограничений) ссылочной целостности;

□ задание паролей;

□ задание языкового драйвера;

□ задание таблицы для выбора значений.

В этом списке обязательным является только первое действие, т. е. каждая табли­ца должна иметь хотя бы одно поле. Остальные действия выполняются при необ-


Глава 4. Технология создания информационной системы


57


ходимости. Часть действий, таких как задание ключа и паролей, производится только для таблиц определенных форматов, например, для таблиц Paradox.

Рис. 4.2. Определение структуры таблицы

Рис. 4.3. Выбор таблицы для заимствования ее структуры


58


Часть I. Основы работы с базами данных


При создании новой таблицы, сразу после выбора ее формата, можно не созда­вать структуру таблицы, а скопировать ее из другой таблицы: при нажатии на кнопку Borrow (Взаймы) открывается окно Select Borrow Table (Выбор таблицы для заимствования) (рис. 4.3).

В этом окне можно выбрать таблицу (ее главный файл) и указать копируемые элементы структуры, установив соответствующий флажок, например, Primary index (Первичный индекс) для ключа. После нажатия кнопки Open из выбран­ной таблицы в новую таблицу копируются описания полей, а также те элемен­ты, для которых установлен флажок. Если какой-либо элемент в структуре ко­пируемой таблицы отсутствует, то состояние флажка не имеет значения. Например, если в выбранной таблице не определены ограничения ссылочной целостности, то в новой таблице они не появятся, даже если установлен флажок Referential integrity (Ссылочная целостность).

Впоследствии скопированную структуру можно настраивать, изменяя, добавляя или удаляя отдельные элементы.

После определения структуры таблицы ее необходимо сохранить, нажав кнопку Save As и указав расположение таблицы на диске и ее имя. В результате на диск записывается новая таблица, первоначально пустая, при этом все необходимые файлы создаются автоматически.

Описание полей

Центральной частью окна определения структуры таблицы является список Field roster (Список полей), в котором указываются поля таблицы. Для каждого поля задаются:

□ имя поля — в столбце Field Name;

□ тип поля — в столбце Туре;

□ размер поля — в столбце Size.

Имя поля вводится по правилам, установленным для выбранного формата таб­лиц. Правила именования и допустимые типы полей таблиц Paradox описаны в главе 2.

Тип поля можно задать, непосредственно указав соответствующий символ, на­пример, а для символьного или i для целочисленного поля, или выбрать его в списке (рис. 4.4), раскрываемом нажатием клавиши <пробел> или щелчком правой кнопки мыши в столбце Туре. Список содержит все типы полей, допус­тимые для заданного формата таблицы. В списке подчеркнуты символы, ис­пользуемые для обозначения соответствующего типа, при выборе типа эти сим­волы автоматически заносятся в столбец Туре.

Размер поля задается не всегда, необходимость его указания зависит от типа поля. Для полей определенного типа, например, автоинкрементного (+) или це­лочисленного (i), размер поля не задается. Для поля строкового типа размер определяет максимальное число символов, которые могут храниться в поле.


Глава 4. Технология создания информационной системы


59


Добавление к списку полей новой строки выполняется переводом курсора вниз на несуществующую строку, в результате чего эта строка появляется в конце списка. Вставка новой строки между существующими строками с уже описанными поля­ми выполняется нажатием клавиши <Insert>. Новая строка вставляется перед строкой, в которой расположен курсор. Для удаления строки необходимо устано­вить курсор на эту строку и нажать комбинацию клавиш <Ctrl>+<Delete>.

Рис. 4.4. Список типов для полей таблицы Paradox 7

Ключ создается указанием его полей. Для указания ключевых полей в столбце ключа (Key) нужно установить символ *, переведя в эту позицию курсор и на­жав любую алфавитно-цифровую клавишу. При повторном нажатии клавиши отметка принадлежности поля ключу снимается. В структуре таблицы ключевые поля должны быть первыми, т. е. верхними в списке полей. Часто для ключа используют автоинкрементное поле (см. рис. 4.2).

Напомним, что для таблиц Paradox ключ также называют первичным индексом (Primary Index), а для таблиц dBase ключ не создается, и его роль выполняет один из индексов.

Для выполнения остальных действий по определению структуры таблицы используется комбинированный список Table properties (Свойства таблицы) (см. рис. 4.2), содержащий следующие пункты:

Secondary Indexes (Вторичные индексы);

Validity Checks (Проверка правильности ввода значений полей) — выбирается по умолчанию;

Referential Integrity (Ссылочная целостность);


60


Часть I. Основы работы с базами данных


П Password Security (Пароли);

Table Language (Язык таблицы, языковой драйвер);

Table Lookup (Таблица выбора);

Dependent Tables (Подчиненные таблицы).

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

Состав данного списка зависит от формата таблицы. Так, для таблицы dBase он содержит только пункты Indexes и Table Language.

Задание индексов

Задание индекса сводится к определению:

□ состава полей;

□ параметров;

□ имени.

Эти элементы устанавливаются или изменяются при выполнении операций соз­дания, изменения и удаления индекса.

(Замечание^

Напомним, что для таблиц Paradox индекс называют также вторичным индексом.

Для выполнения операций, связанных с заданием индексов, необходимо вы­брать пункт Secondary Indexes (Вторичные индексы) списка Table properties (Свойства таблицы), при этом под списком появляются кнопки Define (Опреде­лить) и Modify (Изменить), список индексов и кнопка Erase (Удалить). В спис­ке индексов выводятся имена созданных индексов, на рис. 4.2 это индекс indNamel.

Создание нового индекса начинается с нажатия кнопки Define, которая всегда доступна. Она открывает окно Define Secondary Index (Задание вторичного ин­декса), в котором задаются состав полей и параметры индекса (рис. 4.5).

В списке Fields окна выводятся имена всех полей таблицы, включая и те, кото­рые нельзя включать в состав индекса, например, графическое поле или поле комментария. В списке Indexed fields (Индексные поля) содержатся поля, кото­рые включаются в состав создаваемого индекса. Перемещение полей между списками выполняется выделением нужного поля (полей) и нажатием располо­женных между этими списками кнопок с изображением горизонтальных стре­лок. Имена полей, которые нельзя включать в состав индекса, выделяются в левом списке серым цветом. Поле не может быть повторно включено в состав индекса, если оно уже выбрано и находится в правом списке.


Глава 4. Технология создания информационной системы


61


Замечание

При работе с записями индексные поля обрабатываются в порядке следования этих полей в составе индекса. Это нужно учитывать при указании порядка полей в индексе.

Рис. 4.5. Окно задания индекса

Изменить порядок следования полей в индексе можно с помощью кнопок с изображением вертикальных стрелок, имеющих общее название Change order (Изменить порядок). Для перемещения поля (полей) необходимо его (их) выде­лить и нажать нужную кнопку.

Флажки, расположенные в нижней части окна задания индекса, позволяют ука­зать следующие параметры индекса:

Unique — индекс требует для составляющих его полей уникальных значений;

Maintained — задается автоматическое обслуживание индекса;

Case sensitive — для полей строкового типа учитывается регистр символов;

Descending — сортировка выполняется в порядке убывания значений.

Так как у таблиц dBase нет ключей, для них использование параметра Unique яв­ляется единственной возможностью обеспечить уникальность записей на физиче­ском уровне (уровне организации таблицы), не прибегая к программированию.

После задания состава индексных полей и нажатия кнопки ОК появляется окно Save Index As, в котором нужно указать имя индекса (рис. 4.6). Для удобства обращения к индексу в его имя можно включить имена полей, указав какой-нибудь префикс, например, ind. Нежелательно образовывать имя индекса только из имен полей, т. к. для таблиц Paradox подобная система именования исполь­зуется при автоматическом образовании имен для обозначения ссылочной цело-


62


Часть I. Основы работы с базами данных


стности между таблицами. После повторного нажатия кнопки ОК сформиро­ванный индекс добавляется к таблице, и его имя появляется в списке индексов.

Созданный индекс можно изменить, определив новый состав полей, параметров и имени индекса. Изменение индекса практически не отличается от его созда­ния. После выделения индекса в списке и нажатия кнопки Modify снова откры­вается окно задания индекса (см. рис. 4.5). При нажатии кнопки ОК появляется окно сохранения индекса (см. рис. 4.6), содержащее имя изменяемого индекса, которое можно исправить или оставить прежним.

Рис. 4.6. Задание имени индекса

Для удаления индекса его нужно выделить в списке индексов и нажать кнопку Erase. В результате индекс удаляется без предупреждающих сообщений.

Кнопки Modify и Erase доступны, только если индекс выбран в списке.

Задание ограничений на значения полей

Задание ограничений на значения полей заключается в указании для полей:

□ требования обязательного ввода значения;

□ минимального значения;

□ максимального значения;

□ значения по умолчанию;

□ маски ввода.

СЗамечание^

Установленные ограничения задаются на физическом уровне (уровне таблицы) и действуют для любых программ, выполняющих операции с таблицей: как для про­грамм типа Database Desktop, так и для приложений, создаваемых в Delphi. Допол­нительно к этим ограничениям или вместо них в приложении можно задать про­граммные ограничения.

Для выполнения операций, связанных с заданием ограничений на значения по­лей, нужно выбрать пункт Validity Checks (Проверка значений) комбинирован­ного списка Table properties (см. рис. 4.2), при этом ниже списка появляются флажок Required Field (Обязательное поле), поля редактирования Minimum Value, Maximum Value, Default Value, Picture (Маска ввода) и кнопка Assist (По-


Глава 4. Технология создания информационной системы


63


мощь). Флажок и поля редактирования отображают установки для поля табли­цы, которое выбрано в списке (курсор находится в строке этого поля).

Требование обязательного ввода значения означает, что поле не может быть пустым (иметь значение Null). Это требование действует при добавлении к таб­лице новой записи. До того как изменения в таблице будут подтверждены, поле должно получить какое-либо непустое значение, в противном случае генериру­ется ошибка. Ошибка может также возникнуть при редактировании записи, ко­гда будет удалено старое значение поля и не присвоено новое.

Данное требование удобно использовать для так называемых обязательных полей таблиц, например, для поля фамилии в таблице сотрудников организации.

(_____ ЗамечаниеJ

Обязательность ввода значения не действует на автоинкрементное поле, которое и без того является обязательным и автоматически заполняемым.

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

Для полей некоторых типов, в первую очередь числовых, денежных, строковых и даты, иногда удобно задавать диапазон возможных значений, а также значение по умолчанию. Диапазон определяется минимальным и максимальным возмож­ными значениями, которые вводятся в полях редактирования Minimum Value и Maximum Value. После их задания выход значения поля за указанные границы не допускается при вводе и редактировании любым способом.

Значение поля по умолчанию указывается в поле Default Value. Это значение устанавливается при добавлении новой записи, если при этом для поля не ука­зано какое-либо значение.

(_____ ЗамечаниеJ

Задание диапазона и значений по умолчанию возможно не для всех полей, напри­мер, они не определяются для графического поля и поля комментария. Для этих по­лей соответствующее поле ввода в диалоговом окне определения структуры таблицы (см. рис. 4.2) блокируется.

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

Для маски используются следующие символы:

□ # (цифра);

□? (любая буква; регистр не учитывается);

□ & (любая буква; преобразуется к верхнему регистру);

□ a (любая буква; преобразуется к нижнему регистру);

□ @ (любой символ);


64


Часть I. Основы работы с базами данных


П! (любой символ; преобразуется к верхнему регистру);

□; (за этим символом следует буква);

□ * (число повторов следующего символа);

□ [abc] или {а,ь,с} (любой из приведенных символов — а, ь, или с; во вто­ром случае значения перечисляются через запятую без пробелов).

Маску можно ввести в поле ввода Picture вручную или использовать для этого диалоговое окно Picture Assistance (Помощник представления), вызываемое на­жатием кнопки Assist (рис. 4.7).

Рис. 4.7. Диалоговое окно формирования маски

Указанное окно помогает ввести, выбрать или откорректировать маску, а также проверить ее функционирование.

Список Sample pictures содержит образцы масок, которые выбираются нажатием кнопки Use. Выбранная маска помещается в поле ввода Picture и доступна для изменения. Для модификации списка образцов масок служат кнопки Add to List и Delete from List: первая добавляет к списку маску, содержащуюся в поле ввода Picture, а вторая удаляет из списка Sample pictures выбранную маску.

Проверка синтаксиса маски выполняется по нажатию кнопки Verily Syntax, ре­зультат проверки выводится в информационной панели. Кнопка Restore Original (Вернуть исходную) служит для восстановления начального (т. е. до начала редактирования) значения маски.



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2016-02-16 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: