
Проектирование баз данных методом нормализации
Дипломная работа - Компьютеры, программирование
Другие дипломы по предмету Компьютеры, программирование
ны&3Что такое физика&1-2Основные физически величины&3
Как видим, этот набор отношений так же не содержит неполных функциональных зависимостей, и поэтому эти отношения находятся во второй нормальной форме.
Но для корректной работы нашей базы данных нам не обходимо привести отношения к третьей нормальной форме:
Отношение находится в третьей нормальной форме тогда и только тогда, когда оно находится во второй нормальной форме и не содержит транзитивных зависимостей.
Для этого приведем существующие наборы отношений к следующему виду:
Для начала каждому ученику и предмету присвоим персональный код, и получим следующие отношения:
Код ученика ->Фамилия, Имя, Отчество, Дата рождения, Адрес
Код предмета ->Название предмета
Код ученика ->Код предмета ->Дата проведения занятия ->Оценка
Дата проведения занятия ->Код предмета->Тема, Домашнее задание
Где Код ученика, Код предмета, Дата проведения занятия являются первичными ключами, таким образом имея данный набор отношений получаем следующий набор таблиц:
Ученики
Код ученика*ФамилияИмяОтчествоДата рожденияАдрес1ГалановМихаилСергеевич11.04.1998Комсомольская 352ДаниловСергейГеннадьевич18.05.1998Пер.Солничный1/23БордовскийАлексейВладимирович05.08.1998Набережная 1
Описание структуры:
Предмет
Код Предмета*Название предметаInf_7ИнформатикаFiz_7Физика
Описание структуры:
Отметка
Код ученика*Код предмета*Дата проведенияОценка1Fiz_703,09,1132Fiz_703,09,1153Fiz_703,09,114
Описание структуры:
Тематический план
Дата занятия*Код предмета*Тема занятияДомашнее задание03,09,11Inf_7Что такое информатика&1-203,09,11Fiz_7Что такое физика&1
Описание структуры:
Теперь необходимо удостовериться, что при естественном соединении мы не потеряем ни одной строки и не получим лишних кортежей. (Фамилия, Имя, Отчество, Дата рождения, Адрес, Название предмета, Дата проведения занятия, Тема занятия, Оценка, Домашнее задание). Полученный набор отношений находится в третьей нормальной форме.
Как было сказано выше, что приведения отношений к третьей нормальной форме вполне достаточно для реализации базы данных. В нашем случае так же вполне достаточно привести отношения к третьей нормальной форме, что мы и сделали, теперь можем приступать к реализации данной базы данных.
Установим связи между полученными таблицами:
Создание приложения для работы с базой данных TTable и TQuery
и TQuery являются основными компонентами, используемыми при программировании приложений баз данных (TStoredProc не в iет, и без него можно прекрасно обойтись, вызывая процедуры через select или execute в компоненте TQuery). TTable предоставляет доступ как к таблицам, а TQuery позволяет выполнять произвольные запросы. Если с TQuery все понятно - он выполняет тот запрос, который написан в свойстве TQuery.SQL - то TTable скрывает очень много подробностей своей работы от программиста. Без SQL Monitor увидеть все тонкости невозможно (если кто не знает - SQL Monitor находится в меню Database).
Итак, запустите Delphi, откройте SQL Monitor, положите на форму компонент TDatabase, подсоединитесь к серверу, затем положите компонент TTable, присоедините его к алиасу TDatabase и выберите любую таблицу из списка (свойство TableName). Переключитесь на SQL Monitor, сотрите все что там появилось, переключитесь обратно, и включите TTable.Active:=True; Смотрим в SQL Monitor (лог с самого начала):
первым запросом BDE хочет убедиться, что выбранная нами таблица существует.
второй запрос выбирает список полей выбранной таблицы, их названий, типов, условий проверки и т.п.
третий запрос выбирает информацию об индексах указанной таблицы. Определяется, есть ли среди них первичный ключ, и по каким полям построены индексы.
четвертый запрос почти повторяет второй, и выбирает информацию о полях - условия проверки, "вычисляемость" поля, допустимость NULL и прочее.
собственно, пятый запрос открывает таблицу, формируя запрос SELECT FIELD1, FIELD2, ... FROM TABLE ORDER BY PK_FIELD ASC.
Заметьте, что подобные запросы выполняются каждый раз при открытии таблицы (любой) компонентом TTable. Перечитывания этих данных можно избежать, если включить у используемого алиаса параметр ENABLE SCHEMA CACHE. При этом iитанную первый раз информацию BDE размещает на диске в указанном каталоге (SCHEMA CACHE DIR) в специальном файле, кэширует информацию для SCHEMA CACHE SIZE количества таблиц, и держит эту информацию в кэше в течение SCHEMA CACHE TIME секунд (если -1, то вечно). Если структуры таблиц закэшированы, то при их изменении на сервере (например, добавили новое поле) приложение будет работать со старой структурой, что может вызвать серьезные проблемы в работе приложения. SCHEMA CACHE нужно использовать только тогда, когда структура базы данных определена окончательно и не изменяется. Если все же очень сильно хочется использовать кэширование структур таблиц, то не забывайте правильно установить параметр SCHEMA CACHE TIME. Или при первом за день подключении приложения к серверу сначала кэширование структур можно выключить, отсоединиться, включить и подсоединиться снова - таким образом в самом начале работы кэш структур таблиц будет создан, и будет использоваться в течение дня.
Примечание: параметры SCHEMA CACHE не имеют абсолютно никакого отношения к механизму Cached Updates или к кэшированию данных.
Вернемся к запросу, которым TTable открыл таблицу. В конце запроса стоит указание поря