Лабораторная работа №5 / БДлаб5.doc
Лабораторная работа № 5
Проектирование и создание базы данных
Цель работы: получить навыки проектирования и создания баз данных с использованием утилиты Database Desktop в системе Delphi.
Продолжительность работы - 4 ч.
Теоретические сведения
Проектирование базы данных
Методику проектирования базы данных рассмотрим на примере выполнения учебного задания, по условию которого нужно спроектировать БД и разработать информационную систему для учета жителей и их доходов.
В БД должна храниться информация:
1) о жителях;
2) квартирах, занимаемых жителями;
3) телефонах, установленных в квартирах;
4) источниках и размерах доходов жителей.
В учебном задании объектами, представляющими интерес, являются ЖИТЕЛЬ, КВАРТИРА, ТЕЛЕФОН, ДОХОД. Описание каждого из объектов показано на рис.1. Связи между объектами отражаются на диаграмме ER-типа (рис.2).
В соответствии с методом проектирования БД на основе инфологической модели объекты и связи между ними представляются в БД пятью таблицами:
PERSON (Nom, FIO, Rdate, Pol, SumD, Adr)
FLAT (Adr, Skv, Nrooms, KCategory)
TPHONE (Ntel, TCategory, Adr)
PROFIT (Id, Source, Moneys)
HAVE_D(Nom, Id)
|
Проектирование БД завершается оформлением схемы БД, в которой перечисляются входящие в БД таблицы, атрибуты (столбцы) таблиц и характеристики атрибутов (тип, длина, индексация (ключ) и др.). Схема БД составляется с учетом особенностей СУБД, которая будет выбрана для реализации БД.
Для учебного задания выберем СУБД PARADOX. В этой СУБД имеется ряд типов данных, которые хорошо подходят в качестве типов атрибутов (столбцов) таблиц и позволяют адекватно представить специфику атрибутов (табл.1).
В таблице PERSON атрибут Nom обозначает порядковый номер жителя и используется для однозначной идентификации жителя. Чтобы порядковые номера жителей различались, номер жителя, вновь включаемого в таблицу PERSON, должен быть на 1 больше номера предыдущего жителя. Такая установка номера будет осуществляться автоматически, если атрибут Nom будет типа Autoincrement. Атрибуты FIO, Pol, Adr содержат текстовую информацию и могут быть типа Alpha. Атрибут Rdate должен быть типа Date. Атрибут SumD целесообразно отнести к типу Money.
В таблице FLAT атрибут Adr должен иметь тот же тип Alpha, что и одноименный атрибут в таблице PERSON. Атрибут Skv обозначает площадь квартиры, задаваемую числом с дробной частью, которое относится к типу Number. Атрибут Nrooms может быть типа Short. Атрибут KCategory будет типа Alpha.
В таблице TPHONE атрибуты Ntel и TCategory относятся к типу Alpha, а атрибут Adr должен иметь тот же тип Alpha, что и одноименные атрибуты в таблицах PERSON и FLAT.
Таблица 1
Некоторые типы данных СУБД PARADOX
| Тип | Обозначение | Размер | Примечание |
| Alpha | A | 1..255 | Обычная текстовая информация, не превышающая 255 символов |
| Number | N | Числа с плавающей запятой | |
| Money | $ | Денежная сумма (аналог типа Number, сформатированный для отображения денежных сумм) | |
| Short | S | Двухбайтовое целое | |
| Long Integer | I | Четырехбайтовое целое | |
| Date | D | Дата | |
| Time | T | Время в мс от полуночи | |
| TimeStamp | @ | Комбинация даты и времени | |
| Logical | L | Логический (True/False) | |
| Autoincrement | + | Long Integer с автоматическим приращением единицы | |
| Memo | M | 1..240 | Текст большого объема |
В таблице PROFIT атрибут Id используется для идентификации различных видов доходов (вид дохода - сочетание названия источника и размера дохода). Двух одинаковых видов доходов в таблице PROFIT быть не должно, и для автоматического обеспечения уникальности значения атрибута Id его целесообразно отнести к типу Autoincrement.
Атрибуты Source и Moneys относятся к типам Alpha и Money соответственно.
В таблице HAVE_D атрибуты Nom и Id должны быть типа Long Integer, поскольку их значения являются копиями значений одноименных атрибутов в таблицах PERSON и PROFIT соответственно.
Схема БД приведена в табл.2.
Таблица 2
Схема БД для учебного задания
| Таблица БД | Атрибут | Тип | Размер | Допустимые значения | Значение по умолчанию |
| PERSON | Nom FIO Rdate Pol SumD Adr | Autoincrement Alpha Date Alpha Money Alpha | 30 1 30 | М,Ж | 0 |
| FLAT | Adr Skv Nrooms KCategory | Alpha Number Short Alpha | 30 1 | >=0 0..4 П,Н,К | 0 0 Н |
| TPHONE | Ntel TCategory Adr | Alpha Alpha Alpha | 8 1 30 | ###—#### О,Д,С | О |
| PROFIT | Id Source Moneys | Autoincrement Alpha Money | 20 | >=0 | 0 |
| HAVE_D | Nom Id Comment | Long Integer Long Integer Alpha | 30 | >0 >0 |
Обратите внимание, что в схеме БД список атрибутов таблицы HAVE_D дополнен атрибутом Comment типа Alpha, чтобы при необходимости иметь возможность записать дополнительную информацию (комментарий) о виде дохода Id, который имеется у жителя с номером Nom.
На основе схемы БД создается сама БД. Создавая БД, стремятся, чтобы при ее эксплуатации обеспечивались целостность БД и высокая скорость доступа к информации, хранящейся в БД.
Обеспечение целостности БД
Целостность БД выражается в том, что в любой момент времени БД содержит правильные данные. Целостность БД обеспечивается заданием и проверкой определенных условий, которым должны удовлетворять значения атрибутов, связи атрибутов разных таблиц и другие информационные элементы БД. Такие условия называются ограничениями целостности (ОЦ). Рассмотрим некоторые ОЦ для значений атрибутов и для связей таблиц.
Чтобы память, предназначенная для хранения таблиц, использовалась рационально, в таблицах должно быть сведено к минимуму количество пустых полей, соответствующих неопределенным значениям атрибутов.
В проектируемой БД все атрибуты, за исключением некоторых значений атрибута Comment в таблице HAVE_D, должны иметь определенные значения. Такое ОЦ может быть установлено при создании БД. В СУБД PARADOX это делается установкой признака Required field (Требуемое поле) во время перечисления атрибутов таблицы. Для атрибутов типа Autoincrement этот признак не устанавливается, поскольку их значения всегда определены.
Следующее ОЦ относится к допустимым значениям некоторых атрибутов (см. табл.2). Оно также может быть установлено средствами СУБД PARADOX при перечислении атрибутов таблицы как одно из свойств таблицы.
Важным ОЦ является требование отсутствия одинаковых строк в таблице. Это ОЦ обеспечивается заданием первичного ключа таблицы, представляющего собой атрибут (или набор атрибутов), который однозначно идентифицирует конкретную строку таблицы. Для проектируемой БД первичные ключи перечислены в табл.3.
Таблица 3
Первичные ключи для таблиц проектируемой БД
| Таблица | Первичный ключ | Таблица | Первичный ключ |
| PERSON | Nom | PROFIT | Id |
| FLAT | Adr | HAVE_D | Nom, Id |
| TPHONE | Ntel |
Связи между объектами, изображенные на рис.2, представлены в проектируемой БД связями таблиц, образующих БД (рис.3).
Связь двух таблиц, изображенная на рис.3 линией со стрелками, указывающими на имена атрибутов таблиц, означает, что в первой таблице имеется одна строка (одиночная стрелка) или не менее одной строки (двойная стрелка), в которой значение отмеченного стрелкой атрибута совпадает со значением соответствующего атрибута во второй таблице. Например, связь таблицы FLAT с таблицей PERSON по атрибуту Adr выражается в том, что в таблице FLAT имеется только одна строка со значением атрибута Adr = x, которой соответствует одна или более строк в таблице PERSON, содержащих значение атрибута Adr = x; связь таблицы FLAT с таблицей TPHONE по атрибуту Adr выражается в том, что если в квартире установлен телефон, то в таблице FLAT имеется только одна строка со значением атрибута Adr = x, которой соответствует ровно одна строка в таблице TPHONE, содержащая значение атрибута Adr = x.
Из двух связанных таблиц одна называется главной (master, parent), а другая - подчиненной (detailed, child). Атрибут (или набор атрибутов), по которому связаны две таблицы, в главной таблице является первичным ключом, а в подчиненной таблице - внешним ключом (табл.4).
Таблица 4
Главные и подчиненные таблицы и их ключи
| Главная таблица | Первичный ключ | Подчиненная таблица | Внешний ключ |
| PERSON | Nom | HAVE_D | Nom |
| FLAT | Adr | PERSON | Adr |
| FLAT | Adr | TPHONE | Adr |
| PROFIT | Id | HAVE_D | Id |
Множество значений внешнего ключа должно содержаться во множестве значений соответствующего первичного ключа. Это ОЦ для связей таблиц должно гарантировать отсутствие в подчиненной таблице строк, не связанных через значение внешнего ключа со строкой в главной таблице, а также должно предотвратить удаление из главной таблицы строки, связанной через значение первичного ключа со строками в подчиненной таблице, без предварительного удаления соответствующих строк из подчиненной таблицы.
ОЦ для связей таблиц обеспечивается установкой соответствия значений внешних и первичных ключей для подчиненных и главных таблиц. В СУБД PARADOX это ОЦ задается свойством таблицы Referential Integrity (ссылочная целостность), содержащим описание внешних ключей.
Обеспечение быстрого доступа к информации
Для ускорения доступа к информации, хранящейся в БД, таблицы индексируются. В результате создается индексный файл (индекс), упорядоченный по значениям индексного ключа и содержащий ссылки на строки таблицы.
В качестве индексного ключа используется атрибут (или набор атрибутов) индексируемой таблицы, который часто используется для поиска в таблице. Если индексным ключом является первичный ключ, то созданный индекс называется первичным (Primary Index). Если индексный ключ отличается от первичного, то созданный индекс называется вторичным (Secondary Index). Так, для быстрого поиска жителя по его фамилии в таблице PERSON целесообразно создать вторичный индекс, указав в качестве индексного ключа атрибут FIO. Другим примером индексного ключа служит внешний ключ подчиненной таблицы, в которой созданный вторичный индекс позволяет быстро определить наличие строк, содержащих значения внешних ключей, равные значению первичного ключа главной таблицы.
В СУБД PARADOX первичный индекс формируется автоматически при создании БД, когда атрибут таблицы отмечается как принадлежащий первичному ключу. Так же автоматически формируется вторичный индекс по внешнему ключу, когда для подчиненной таблицы устанавливается свойство Referential Integrity. Другие вторичные индексы, необходимые для работы с таблицей, формируются, когда для таблицы устанавливается свойство Secondary Indexes.
Создание базы данных
Создание каталогов
Таблицы, входящие в состав БД, хранятся в компьютере в виде файлов, которые следует поместить в один каталог. Создадим для этих целей каталог D:\DELPHI\DATAPRDX.
Для нормальной работы утилиты Database Desktop (DBD) в локальной сети с защищенными сетевыми дисками дополнительно следует создать каталог D:\DELPHI\DBD; с помощью утилиты DBD в качестве Private Directory задать D:\DELPHI\DBD; в качестве Working Directory - D:\DELPHI\DATAPRDX. При выходе из утилиты нужно подтвердить сделанные изменения.
Создание псевдонима для БД
Для обозначения БД используется псевдоним (alias), который позволяет определить местоположение таблиц, составляющих БД. Псевдоним заменяет спецификацию пути, обозначающего каталог, содержащий файлы, соответствующие таблицам БД. Для создания псевдонима запустим утилиту DBD.
В главном меню утилиты DBD выберем команду Tools | Alias Manager. В появившемся диалоговом окне нажмем кнопку New и в строке Database alias наберем псевдоним TUTOR_DATABASE; в строке Driver type выберем тип драйвера STANDARD, а в строке Path введем спецификацию пути D:\DELPHI\DATAPRDX. Для сохранения псевдонима нажмем кнопку Keep new, а затем OK и кнопку Да в ответ на запрос Okay to save Public Aliases to ...?
