Особенности многотабличных баз данных
Довольно часто случается ситуация, при которой хранить целиком базу данных в одной таблице очень не удобно и не практично. В таблице может содержаться большое количество полей, что является неудобным для пользователя. При этом записи во многих полях могут повторяться, что приводит к увеличению информационного объема БД и замедлению процедуры ее обработки. При хранении в БД слишком большого количества данных и при наличии в таблице большого количества полей ее требуется нормализовать. Как правило, в процессе нормализации образуется многотабличная БД.
БД считается нормализованной в случае выполнения следующих условий:
- каждая таблица должна иметь главный ключ;
- все поля каждой таблицы целиком зависят только от главного ключа;
- в таблице должны отсутствовать группы повторяющихся значений.
По завершению создания таблиц с данными, которые относятся к различным аспектам БД, требуется обеспечить целостность самой базы данных. Для этого нужно связать таблицы между собой.
Различают связи нескольких типов:
- один-к-одному, когда каждой записи в 1 таблице соответствует лишь 1 запись в другой таблице;
- один-ко-многим, когда каждой записи главной таблицы соответствуют несколько записей подчиненной таблицы;
- многие-ко-многим, когда 1 записи первой таблицы соответствуют несколько записей второй таблицы и, наоборот.
Связанные между собой таблицы являются единой базой данных, в которой возможно создание новых таблиц, а также запросов и отчетов. Заполнять базу данных можно с помощью формы. Рассмотрим это на примере. Допустим в табличной базе данных «Комплектующие компьютера и поставщики» содержится информация о различных комплектующих, кроме того, она имеет поля Счетчик, Наименование, Описание, Название фирмы, Адрес, Цена (в рублях) - табл. 1.
Как видно, половина объема таблицы занята избыточной, дублированной информацией.
Разберемся с причиной дублирования. У комплектующих компьютера имеется 2 неотъемлемых свойства: наименование и описание. В свою очередь, название фирмы, ее адрес и цена компьютера не будут являться свойствами комплектующих, это свойства поставщика.
Правильнее будет разбить искомую таблицу на 2: Комплектующие (табл. 2) и Поставщики (табл. 3). При этом каждая таблица должна иметь хотя бы 1 ключевое поле, значение которого является уникальным для каждой записи данной таблицы. В таблицу Комплектующие вводим поле Код комплектующих, которое будет ключевым.
В таблицу Поставщики вводим дополнительное поле Код поставщика, которое станет ключевым для данной таблицы.
Эти 2 таблицы, которые находятся в отношении многие-ко-многим, связываются друг с другом только с помощью третьей таблицы. Таблицы Комплектующие и Поставщики связываются отношением многие-ко-многим, используя создание 2 связей один-ко-многим относительно к таблице Цена.
Таблицы Комплектующие и Поставщики станут главными относительно таблицы Цена. Связью между таблицами установятся отношения между идентичными значениями в полях, имеющих одинаковые имена. С ключевым полем главной таблицы (первичный ключ) будет связано поле с таким же именем подчиненной таблицы (внешний ключ).
Главная таблица Комплектующие содержит поле Код комплектующих, являющееся первичным ключом, соответственно в подчиненной таблице Цена будет иметься поле с таким же именем, которое будет являться внешним ключом. Таблица Поставщики будет являться главной относительно таблицы Цена. Ее поле Код поставщика - первичный ключ, соответственно в подчиненной таблице Цена будет присутствовать поле с таким же именем, являющееся внешним ключом.
Отсюда следует, что таблица Цена будет содержать поля (табл. 4):
- Счетчик, являющееся ключевым;
- Код комплектующих, являющееся внешним ключом для таблицы Комплектующие;
- Код поставщика, являющееся внешним ключом для таблицы Поставщики;
- Цена, являющееся числовым.
Если в начале заполним таблицу поставщиков, то для заполнения других данных можно будет составить форму согласно первоначальной таблице 1, в этом случае поставщиков можно будет выбрать из списка. Подобное заполнение данных потребует намного меньших затрат сил и времени.
Создание многотабличной формы
Многотабличную форму создают на основе нескольких взаи-мосвязанных таблиц. Она может состоять из 1 формы или из основной и 1 или нескольких подчиненных форм. Подчиненная форма может строиться как на основе подчиненной, так и главной таблиц.
Многотабличную форму можно создать в режиме Конструктора или при помощи Мастера форм. Однако в Access, как правило, используется изначальное создание форм при помощи мастера, и затем они могут дорабатываться в режиме Конструктора. В ходе создания многотабличной формы в Мастере форм приложением Access создается для нее базовая инструкция SQL, содержащая сведения об используемых таблицах и полях.
Перечислим способы, создающие многотабличные формы при помо-щи Мастера:
- Явное включение подчиненной формы, при котором подчиненная форма будет строиться на основе подчиненной таблицы относительно таблицы, на основе которой построена основная часть формы.
- Вызов связанной формы по кнопке. Созданные при помощи Мастера связанные подчиненные формы не обязательно должны включаться непосредственно в основную форму, их можно вызывать по необходимости нажатием на включенную в нее кнопку. В этом случае открывающееся содержимое связанной формы будет синхронизироваться с текущей записью формы. Данный способ построения является удобным для сложных многотабличных форм, которые перегружены большим числом элементов управления, а также для пользователя, которому не нужно постоянно видеть связанные данные.
- Без использования подчиненных и связанных форм. Подобную многотабличную форму создают при необходимости отображения записей подчиненной таблицы, которые дополнены полями из одной или не-скольких главных таблиц. В данном случае источником данных, выводящихся в форму, будет являться запись подчиненной таблицы. При этом форма отобразит поля из записи подчиненной таблицы и поля из единственной связанной с ней записи главной таблицы.
- На основе запроса. Для запроса, имеющего уже созданные записи в результате объединения полей связанных записей главной и каждой из подчиненной таблиц, мастер будет строить форму таким же образом, как в случае с заданными исходными таблицами. Благодаря чему будет создана форма, которая обеспечивает однократное отображение данных, поскольку она базируется на исходных нормализованных таблицах.
Полученную при помощи мастера составную форму при необхо-димости можно отредактировать, в том числе дополнить другими включаемыми формами.
Выбор таблиц и полей необходимо производить в следующем порядке:
- В окне БД будет выбирается закладка Форма и нажимается клавиша Создать.
- В окне Новая форма будет выбираться режим создания Мастер форм, а источником данных основной части формы выбирается таблица или запрос из списка.
- В первом диалоговом окне Создание форм последовательно выбираются таблицы, а в них поля, которые будут включаться в форму, после этого требуется нажать кнопку Далее.
- Во втором диалоговом окне Создание форм будет выбираться вариант создания многотабличной формы, для этого в рамке необходимо выбрать вид представления данных - выделить таблицу, являющуюся источником основной части формы.
Когда таблица (источник основной части формы) станет главной по отношению к другой таблице формы, то в окне Создание форм выберется 1 из 2 возможных типов подключения подчиненных форм:
- при непосредственном включении — Подчиненные формы;
- при включении кнопки, которая вызывает связанную форму, Связанные формы.
Затем выбирается вид подчиненной или связанной формы: Ленточный или Табличный. В диалоговом окне Создание форм будет выбран стиль оформления, определяющий внешний вид надписей и значений полей в форме. В последнем диалоговом окне Создание форм будет завершено создание формы Мастером, т.е. можно будет редактировать заголовки форм и выбирать дальнейшие действия: Открытие формы для просмотра или ввода данных либо Изменение макета формы.