Кудравцев Создание баз данных 2010
.pdf
|
Таблица 2.10 |
|
|
БОНУС |
|
|
|
|
ID_Worker |
Skill |
|
1111 |
Программист I |
|
2222 |
Вед. программ. |
|
3333 |
Программист II |
|
4444 |
Программист II |
|
3.Если имеются другие функциональные зависимости, нарушающие 3НФ, то шаги 1 и 2 повторяются для каждой из них.
4.Если один и тот же детерминант входит в несколько функциональных зависимостей, то все зависящие от него атрибуты помещаются в одну таблицу, ключом которой будет детерминант.
Таким образом, в результате разбиения получаются две таблицы меньшего размера, и реляционная схема может быть записана как
БОНУС (ID_Worker, Skill)
Внешний ключ: Skill ДОЛЖНОСТЬ_БОНУС ДОЛЖНОСТЬ_БОНУС (Skill, Bonus)
Следует отметить, что процесс нормализации выполняется последовательно, т.е. сначала таблица приводится к 1НФ, далее к 2НФ и, наконец, к 3НФ. Таким образом, таблица, находящаяся в 3НФ, находится во 2НФ и тем более в 1НФ.
Многозначные зависимости
Нормализация – это разбиение таблицы на две или более, обладающих лучшими свойствами при вводе, изменении и удалении данных. Окончательная цель нормализации сводится к получению такого проекта базы данных, в котором каждый факт появляется лишь в одном месте, т.е. исключена избыточность информации. Это делается не столько с целью экономии памяти, сколько для исключения возможной противоречивости хранимых данных.
По существу, таблица находится в 2НФ, если она находится в 1НФ и удовлетворяет, кроме того, некоторому дополнительному условию, суть которого будет рассмотрена ниже. Таблица находится в 3НФ, если она находится в 2НФ и, помимо этого, удовлетворяет еще другому дополнительному условию и т.д.
71
Таким образом, каждая нормальная форма является в некотором смысле более ограниченной, но и более желательной, чем предшествующая.
Это связано с тем, что "(N+1)-я нормальная форма" не обладает некоторыми непривлекательными особенностями, свойственными "N-й нормальной форме". Общий смысл дополнительного условия, налагаемого на (N+1)-ю нормальную форму по отношению к N-й нормальной форме, состоит в исключении этих непривлекательных особенностей.
Теория нормализации основывается на наличии той или иной зависимости между полями таблицы.
Определены два вида таких зависимостей: функциональные и многозначные. Функциональные зависимости были рассмотрены ранее.
Многозначная зависимость может быть определена следующим образом:
Поле А многозначно определяет поле В той же таблицы, если для каждого значения поля А существует хорошо определенное множество соответствующих значений В.
Для примера рассмотрим табл. 2.11, в которой есть многозначная зависимость:
Дисциплина Преподаватель
|
|
|
Таблица 2.11 |
|
|
|
ОБУЧЕНИЕ |
||
|
|
|
|
|
Дисциплина |
Преподаватель |
|
Учебник |
|
|
|
|
|
|
Базы данных |
Иванов И.И. |
|
Мейер Д. Теория реляционных баз данных. |
|
|
|
|
|
|
Базы данных |
Иванов И.И. |
|
Хансен Г., Хансен Дж. Базы данных |
|
|
|
|
|
|
Базы данных |
Петров П.П. |
|
Мейер Д. Теория реляционных баз данных. |
|
|
|
|
|
|
Базы данных |
Петров П.П. |
|
Хансен Г., Хансен Дж. Базы данных |
|
|
|
|
|
|
... |
... |
|
... |
|
|
|
|
|
|
Дисциплина (Базы данных) может может читаться несколькими преподавателями (Ивановым и Петровым). Есть и другая многозначная зависимость:
Дисциплина Учебник
72
При этом Преподаватель и Учебник не связаны функциональной зависимостью, что приводит к появлению избыточности (для добавление еще одного учебника придется ввести в таблицу две новых строки). Поэтому целесообразно заменить эту таблицу на две: (Дисциплина—Преподаватель и Дисциплина—Учебник).
В 4НФ и 5НФ учитываются не только функциональные, но и многозначные зависимости между полями таблицы. Для определения 4НФ и 5НФ установим значение понятия «полной декомпозиции таблицы».
Полной декомпозицией таблицы называют такую совокупность произвольного числа ее проекций, соединение которых полностью совпадает с содержимым таблицы.
Таблица находится в пятой нормальной форме (5НФ) тогда и только тогда, когда в каждой ее полной декомпозиции все проекции содержат возможный ключ. Таблица, не имеющая ни одной полной декомпозиции, также находится в 5НФ.
Четвертая нормальная форма (4НФ) является частным случаем 5НФ, когда полная декомпозиция должна быть соединением ровно двух проекций. Весьма непросто подобрать реальную таблицу, которая находилась бы в 4НФ, но не была бы в 5НФ.
Следует отметить, что 4НФ, 5НФ, а также нормальные формы более высоких порядков носят в основном теоретический характер и на практике практически не используются.
Контрольные вопросы
1. В чем принципиальное отличие реляционной модели данных от сетевой и иерархической?
2. В каком случае может быть нарушена вторая нормальная форма?
3.Когда используется операция деления в реляционной алгебре?
4.Что означает логическая эквивалентность реляционной алгебры и реляционного исчисления?
5.Что означает функциональная зависимость между атрибутами?
6.Найти с помощью операций реляционной алгебры максимальное и минимальное значения численного атрибута таблицы.
73
Глава 3. РАБОТА с MS ACCESS
Архитектура приложения MS Access
Основными элементами архитектуры MS Access являются [4]:
▪семейства;
▪объекты;
▪свойства;
▪методы,
которые организованы в иерархические структуры моделей объектов.
MS Access имеет два основных компонента [4]: ядро приложения (Application engine), контролирующее программный интерфейс приложения и ядро базы данных (Jet DBEngine), управляющее хранением данных и определением всех объектов базы данных.
Обобщенная модель ядра приложения
Обобщенная архитектура ядра приложения представлена на рис. 3.1, на котором прямоугольниками со сплошными линиями представлены объекты или свойства возвращающие объекты ядра приложения. Прямоугольники с пунктирными линиями представляют собой семейства содержащие наборы однотипных объектов (формы, отчеты, элементы управления и т.д.).
При открытии базы данных ядро приложения формирует объект Application, который находится на самом верхнем уровне иерархии. Этот объект содержит семейства Forms, Reports, References и Modules. Каждая форма или отчет содержит семейство Controls, в которое входят все элементы управления формы или отчета. Помимо перечисленных семейств объект Application содержит свойства возвращающие объекты, которые позволяют сообщить разработчику массу полезной информации:
▪имя текущей строки меню;
▪тип и имя объекта, в котором находится фокус;
▪активная страница и т.д.
Объект DoCmd позволяет выполнять макрокоманды Visual Basic.
74
Объект DBEngine является связующим звеном с объектами DAO |
||
(data Access Object), которые будут рассмотрены ниже. |
||
applicationAengine |
|
|
applicationA |
|
|
Forms |
Form 1 |
Controls |
Modules |
Form 2 |
|
Reports |
Reports 1 |
Controls |
References |
Reports 2 |
|
DoCmd |
|
|
DBEngine |
|
|
Screen |
ActiveForm |
|
|
ActiveReport |
|
|
ActiveControl |
|
|
MousePointer |
|
|
ActiveDatasheet |
|
CurrentDate |
AllTables |
|
|
AllQueries |
|
|
AllViews |
|
Рис. 3.1. Обобщенная архитектура ядра приложения |
75
Модель Data Access Object
Данная модель лучше всего подходит для использования с приложением Application engine базы данных MS Access, поскольку предоставляет объекты, методы и свойства, разработанные с учетом особенностей ядра базы данных Jet DBEngine. При использовании данной модели необходимо подключить библиотеку Microsoft DAO 3.6 Object Library. Это можно сделать, выбрав пункт ме-
ню Tools References в окне редактора Microsoft Visual Basic. В
результате появится форма представленная на рис. 3.2, предназначенная для выбора необходимых библиотек (References).
Рис. 3.2. Форма выбора библиотек Visual Basic
Укрупненная модель DAO представлена на рис. 3.3. Как и на рис. 3.1, здесь прямоугольниками со сплошными линиями представлены объекты модели DAO; прямоугольники с пунктирными линиями — семейства, содержащие наборы однотипных объектов.
При открытии базы данных объект DBEngine устанавливает семейство Workspaces и стандартный объект Workspace. Для защиты доступа к данным используются объекты User и Group. На заключительном этапе DBEngine создает объект Database (внутри семейства Databases). Каждый объект Database содержит набор семейств (TableDefs, QueryDefs и т.д.), объекты которых позволяют получать
76
доступ к различным объектам базы данных (таблицам, запросам, |
|||
наборам записей и т.д.) и вносить в них изменения. |
|
||
DBEngine |
|
|
|
Workspaces |
Workspace |
|
|
|
Users |
User |
|
|
Groups |
Group |
|
|
Databases |
Database |
|
|
|
TableDefs |
TableDef |
|
|
|
Fields |
|
|
QueryDefs |
QueryDef |
|
|
|
Fields |
|
|
Indexes |
Index |
|
|
|
Fields |
|
|
Recordsets |
Recordset |
|
|
|
Fields |
Рис. 3.3. Укрупненная модель DAO |
|
Приведенные структуры доступа к данным и элементам пользовательского интерфейса позволяют разработчикам создавать очень гибкие и удобные приложения.
77
Ссылки на семейства, объекты и свойства
Существуют три варианта синтаксиса ссылки на объекты MS Access [4]:
▪Семейство![Объект], например, Forms![Zakaz];
▪Семейство(―Объект‖), например, Forms(―Zakaz‖);
▪Семейство(Относительный номер объекта), например, Forms(1) будет ссылаться на вторую открытую форму. Объекты внутри семейства нумеруются от нуля. Количество объектов внутри семейства определяется с помощью свойства Count. Например, Forms.Count содержит информацию о количестве открытых форм, а Workspaces.Count определяет количество рабочих пространств в семействе Workspaces.
Как было рассмотрено ранее, модель доступа к объектам является иерархической и поэтому полное имя объекта начинается с имени объекта самого верхнего уровня иерархии. Полное имя объекта состоит из нескольких частей разделенных символами точки «.» и(или) восклицательного знака «!».
Восклицательный знак ставится перед именем объекта, содержащегося в предшествующем объекте или семействе объектов. Имя объекта, расположенного за восклицательным знаком, обычно принадлежит объекту, созданному пользователем, и, как правило, заключается в квадратные скобки.
Точка ставится перед именем семейства, свойства или метода, который может применяться для указанного передним объекта. Имена, расположенные вслед за точкой, никогда не содержат пробелов и в квадратные скобки не заключаются.
Например, полное имя (ссылка) DBEngine.Workspaces(0).Databases(0).Tabledefs(1).Name
указывает на свойство «Name» второго объекта Tabledef (отсчет начинается от нуля) в текущей базе данных.
Похожая ссылка
DBEngine.Workspaces(0).Databases(0).Tabledefs(10)![Name]
указывает на объект «Name», которое содержится в 11-м объекте Tabledef семейства Tabledefs. Заметим, что объект Tabledef описывает одну таблицу базы данных, и в данном случае объект «Name» является одним из полей описываемой таблицы.
Полная информация о семействах, объектах и свойствах содержится в интерактивной справочной системе MS Access.
78
Работа с объектными переменными
Рассмотрим процедуру на языке Visual Basic, в которой приводится пример использования объектных переменных для создания новой базы данных в текущем рабочем пространстве.
Sub NewDatabases()
‗Объявление объектных переменных типа Workspace и Database Dim wsp As Workspace
Dim dbsCurrent As Database, dbsNew As Database Dim dbsAnother As Database, dbs As Database
‗Инициализация объектных переменных
Set dbsCurrent=CurrentDb()
Set wsp=DBEngine.Workspaces(0)
‗ Вызов метода CreateDatabase объекта Workspace
Set dbsNew=wsp.CreateDatabase(―Newdb.mdb‖, dbLangGe-
neral)
‗ Вызов метода OpenDatabase объекта Workspace
Set dbsAnother =wsp.OpenDatabase(―Another.mdb‖)
‗Печать имен баз данных семейства Databases рабочего про-
странства DBEngine.Workspaces(0) For Each dbs In wsp.Databases
Debug.Print dbs.Name Next dbs
‗Освобождение объектных переменных
For Each dbs In wsp.Databases
Set dbs=Nothing
Next dbs
Set wsp=Nothing End Sub
Подробная информация о свойствах и методах объектов DAO содержится в интерактивной справочной системе MS Access.
79
Практические аспекты работы с MS Access
Рассмотрим несколько практических вопросов создания удобных интерфейсов (форм) для работы с данными в MS Access, используя при этом объектные переменные и модель DAO. В качестве предметной области выберем коммерческую фирму, занимающуюся поставками компьютерной техники. Требуется создать базу данных учета IT-заказов для клиентов. Заказ состоит из нескольких товаров. Товары делятся на типы (мониторы, принтеры и т.д.). Реляционная схема данных, реализованная средствами MS Access, представлена на рис. 3.4.
Рис. 3.4. Реляционная схема данных учета IT-заказов
Динамическое изменение «Поля со списком»
Рассмотрим механизм динамического изменения содержимого «Поля со списком» в зависимости от выбранного значения из другого «Поля со списком». На рис.3.5 представлена форма «Тип_Товар», в которой содержатся два поля со списком. Особенность работы данной формы состоит в том, что при выборе определенного типа товара в поле «Тип товара» (например «Принтеры»), в поле со списком «Товар» отражаются только товары данного типа (например, принтеры Epson, HP, Xerox). Если же выбран тип
80