Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Кудравцев Создание баз данных 2010

.pdf
Скачиваний:
83
Добавлен:
16.08.2013
Размер:
2.65 Mб
Скачать

 

Таблица 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