Модификация самой структуры БД включает в себя возможности расщепления, объединения таблиц; изменения первичных ключей и структуры связей между таблицами.
1. Изменение первичных ключей базы данных
При работе с базой может возникнуть необходимость изменения первичных ключей некоторых таблиц. Так, если бы мы в таблице "Преподаватели" определили первичный ключ по полю "Фамилия", он бы не всегда однозначно идентифицировал записи в таблице, т.к. в таблице может быть несколько преподавателей с фамилиями "Петров", "Сидоров" и т.д.
Выходом из этой ситуации является или выбор "более уникального" поля, или же вводится поле типа "Счетчик", значение которого никогда не повторяется. В нашей таблице таким полем является "Номер_П", поскольку у каждого преподавателя свой уникальный номер.
Переопределение первичного ключа производится или сбросом определения ключа в описании индексов (команда "Индекс" меню "Вид" выводит список индексов БД, в ней активизируем строку "Первичный ключ" для поля, являющегося первичным ключом, и нажимаем кнопку "Del" клавиатуры); а затем установив новый первичный ключ (командой "определить ключ" меню "Правка"). Либо же активизацией поля будущего первичного ключа, и щелчком на кнопке "Первичный ключ" панели инструментов.
Для определения ключа можно выделить несколько полей одновременно. Для этого удерживаем нажатой клавишу "Ctrl" клавиатуры и щелкаем по области маркировки требуемых строк. При невозможности переопределения выводится информационное окно Access.
2. Модификация структуры связей базы данных
Возможности определения и модификации структуры связей базы данных были рассмотрены в предыдущей лабораторной работе, и особенных затруднений не представляют.
Сложная структура связей базы , особенно с множественными связями, при установленных требованиях каскадного обновления и удаления связанных полей, приводит к замедлению работы Access. Поэтому после создания базы и какого-то периода ее эксплуатации рекомендуется пересмотреть структуру таблиц и их связей в целях оптимизации.
Из видов модификации базы данных иногда может потребоваться расщепление одной таблицы на несколько, или же объединение группы таблиц в одну. рассмотрим их применение по отношению к базе STUD.
3. Расщепление таблиц
Расщепление таблиц может потребоваться в том случае, если какая-то из таблиц проекта содержит редко используемую группу полей. Например, в запросах используются основные признаки объекта, а более детальная информация бывает востребована редко: в итогах, сводках, и т.д.
Имеет смысл расщепить такую таблицу на две или более частей, связав их по какому-либо признаку объекта.
Также повышает производительность системы расщепление таблицы, если к части данных необходимо ограничить доступ пользователей. К конфиденциальным данным можно отнести информацию о адресах заказчиков, зарплате сотрудников, деталях контрактов и т.д. В том случае закрытая информация обосабливается в отдельные таблицы, и доступ к ним пользователей ограничивается.
Можно использовать присоединение данных через сеть, ограничив доступ пользователей к данным средствами сетевой ОС.
Рассмотрим расщепление на примере таблицы "Преподаватели". Отделим личную информацию о преподавателях (домашний адрес, домашний телефон, зарплата) от служебной (стаж, должность и т.д.).
Создадим копию проекта базы данных, т.к. расщепление таблицы будет нести демонстрационный характер, и в следующих лабораторных работах мы будем пользоваться сохраненным вариантом. Для создания копии базы средствами Windows или Dos скопируем закрытый проект базы данных (файл STUD.mdb) в другой каталог.
Простейший метод расщепления таблицы - создание ее копии, удаление из обеих таблиц лишних полей; настройка связей - и занесение модифицированных таблиц обратно в проект.
Рассмотрим общий алгоритм расщепления таблиц:
1. Создаем 2 копии таблицы.
2. Обеим копиям таблиц даются уникальные имена.
3. Из обеих таблиц удаляются лишние поля.
4.В окне "Свойства таблиц" удаляются все условия на значение, содержащие в себе ссылки на удаленные поля.
5. В окне "Индексы" удаляются все индексы и ключи, построенные на удаленных полях.
6. При необходимости генерируются первичные ключи для созданных таблиц (возможно введение нового поля типа "Счетчик").
7. В окне "Схема данных" (команда "Схема данных" меню "Сервис"), выбирается режим "Все связи" нажатием соответствующей кнопки на панели инструментов.
8. Удаляются все связи между таблицей - оригиналом и другими таблицами (щелкая по линии связи таблиц для активизации связи и нажимается клавиша "Del" на клавиатуре).
9. В схему данных вводятся таблицы - копии (щелкнув на кнопке "Добавить таблицу" панели инструментов).
10. Устанавливаются связи таблиц - копий с другими таблицами.
11. Возможно, удаляется таблица - оригинал.
12. Сохраняется структура проекта БД.
Применительно к таблице "преподаватели":
- создадим таблицы "Преподаватели_личное" с полями "Зарплата", "Адрес_дом", "Телефон_дом",”Номер_П” ; и "Преподаватели_служебное", со всеми оставшимися полями плюс "Номер_П" для связи;
- удаляем индексы на таблице "Преподаватели" и описание первичного ключа по полю "Номер_П";
- В окне схемы данных устанавливаем связи: "Преподаватели_служебное.Номер_П" с "Занятия.Номер_П" типа “один-ко-многим” и "Преподаватели_служебное.Номер_П" с "Преподаватели_личное.Номер_П" типа “один-к-одному”;
- удаляем таблицу "Преподаватели";
- сохраняем проект под именем STUD_2.mdb.
4. Объединение таблиц