Пример проектирования БД
Задача: Создать БД реализации товаров со складов, при условии, что на одном складе может храниться только один вид товара.
1. Составим примерный перечень отчетов, которые могут быть затребованы пользователями БД.
Отчет №1. Данные о товарах (Наименование, Марка, Цена, Номер телефона склада, где хранится товар, Количество имеющегося на складе товара, Описание товара, Название фирмы, которая занимается реализацией товара).
Отчет №2. Данные о фирмах (Название фирмы, Адрес фирмы, Телефон фирмы, Наименование товара, реализуемого фирмой).
Отчет №3. Система скидок (Фирма, Товар, Скидка).
Отчет №4. Продажи (Дата, Фирма, Товар, Марка товара, Количество проданного товара).
Отчет №5. Данные о складах (Номер склада, Адрес склада, Телефон склада, Фамилия заведующего, Товар, хранимый на складе).
Отчет №6. Данные о контактных лицах фирм (Фамилия, Имя, Дата рождения, Домашний адрес, Домашний телефон, Должность, Название фирмы, сотрудником которой он является).
Отчет №7. Список директоров фирм (Фамилия, Телефон фирмы, Адрес фирмы, Домашний телефон, Домашний адрес)[2].
Составим подробный перечень всех элементов данных, требуемых для отчетов и сгруппируем их в таблицы БД
Отчет№1 | Отчет№2 | Отчет№3 | Отчет№4 | Отчет№5 | Отчет№6 | Отчет№7 | |
Наименование товара | + | + | + | + | + | ||
Марка товара | + | + | |||||
Цена | + | ||||||
Количество | + | ||||||
Описание товара | + | ||||||
Название фирмы | + | + | + | + | + | ||
Адрес фирмы | + | + | |||||
Телефон фирмы | + | + | |||||
Скидка | + | ||||||
Номер склада | + | ||||||
Адрес склада | + | ||||||
Телефон склада | + | + | |||||
Фамилия заведующего | + | ||||||
Дата продажи | + | ||||||
Количество продажи | + | ||||||
Фамилия контактного лица | + | + | |||||
Имя | + | ||||||
Дата рождения | + | ||||||
Адрес домашний | + | + | |||||
Телефон домашний | + | + | |||||
Должность | + | + |
Сгруппируем данные в таблицы:
3. Для каждой таблицы определим уникальный идентификатор (первичный ключ) и перегруппируем таблицы так, чтобы в них остались только данные, относящиеся к объекту, определяемому первичным ключом.
Сформировав таблицы и установив ключевое поле[3] для каждой таблицы, между таблицами можно установить взаимосвязи, которые будут поддерживаться при создании форм, отчетов и запросов и задать условия целостности данных этих таблиц.
Существует 3 типа связей:
1. "один к одному"– каждой записи одной таблицы соответствует только одна запись в другой;
2. "один ко многим"- каждой записи одной таблицы может соответствовать несколько записей в другой таблице или "многие к одному"– в таблице может быть несколько записей, соответствующих только одной записи в другой таблице;
3. "многие ко многим"– множеству записей одной таблицы соответствует множество записей другой таблицы.
При определении связи ключ в одной таблице содержит ссылки на конкретные записи в другой таблице. Поле, не являющееся ключевым для данной таблицы, но значения которого являются значениями первичного ключа другой таблицы, называют внешним ключом[4]. Содержимое поля внешнего ключа (значения и свойства) должно совпадать с содержимым ключевого поля. Эти поля также могут иметь одинаковые имена.
В нашем примере между полученными объектами установились следующие отношения:
ü "Склады" и "Товары"–– отношение "один ко многим"[5];
ü "Фирмы" и "Контактные лица" –– отношение "один ко многим";
ü "Фирмы" и "Товары" - отношение "многие ко многим".
Аccess не позволяет определить прямую связь "многие ко многим" между двумя таблицами. В этом случае необходимо создать дополнительную таблицу, с помощью которой одна связь "многие ко многим" будет сведена к двум связям типа "один ко многим". В нашем примере такой дополнительной таблицей может являться таблица "Продажи", ключ которой состоит из двух полей (составной ключ), являющимися полями первичного ключа в таблицах "Фирмы" и "Товары".
Продажи
Код фирмы Код товара Кол-во товара Дата продажи Скидка |
Так как одна фирма может покупать один и тот же товар в разные дни, то в ключ следует добавить еще одно поле, позволяющее сделать каждую запись таблицы уникальной. В нашем случае в ключ можно поместить поле Дата продажи.
Графически связи и таблицы после преобразования могут быть представлены в следующем виде: