В дальнейшем изложении в качестве примера будет использоваться небольшая база данных, отражающая процесс поставки или продажи некоторого товара постоянным клиентам.
Исходя из анализа предметной области, можно выделить два типа сущностей – ТОВАР и КЛИЕНТ, которые связаны между собой отношением "многие–ко–многим", т.к. каждый покупатель может купить много наименований товара, а каждый товар может быть куплен многими покупателями. Однако реляционная модель данных требует заменить отношение "многие–ко-многим" на несколько отношений "один–ко-многим". Добавим еще один тип сущностей, отображающий процесс продажи товаров, – СДЕЛКА.
Установим связи между объектами. Один покупатель может неоднократно покупать товары, поэтому между объектами КЛИЕНТ и СДЕЛКА имеется связь "один–ко–многим". Каждое наименование товара может неоднократно участвовать в сделках, в результате между объектами ТОВАР и СДЕЛКА имеется связь "один-ко-многим".
Определим атрибуты и свяжем их с сущностями и связями. К объекту ТОВАР относятся такие характеристики, как название, тип, цена, сорт. К объекту КЛИЕНТ – имя, отчество, фамилия, фирма, город, телефон. Тип сущности СДЕЛКА может быть охарактеризован такими признаками, как дата и количество проданного товара.
Важным этапом в создании базы данных является определение атрибутов, которые однозначно определяют каждый экземпляр сущности, т.е. выявление первичных ключей.
Для таблицы ТОВАР название не может служить первичным ключом, т.к. товары разных типов могут иметь одинаковые названия, поэтому введем первичный ключ КодТовара, под которым можно понимать, например, артикул товара. Точно так же ни Имя, ни Фирма, ни Город не могут служить первичным ключом в таблице КЛИЕНТ. Введем первичный ключ КодКлиента, под которым можно понимать номер паспорта, идентификационный номер налогоплательщика или любой другой атрибут, однозначно определяющий каждого клиента. Для таблицы СДЕЛКА первичным ключом является поле КодСделки, т.к. оно однозначно определяет дату, покупателя и другие элементы данных. В качествепервичного ключа можно было бы выбрать не одно поле, а некоторую совокупность полей, но для иллюстрации конструкций языка ограничимся простыми первичными ключами.
Установим связи между таблицами. Один покупатель может неоднократно покупать товары. Поэтому между таблицами КЛИЕНТ и СДЕЛКА имеется связь "один–ко–многим" по полю КодКлиента.
Каждый покупатель может приобрести несколько различных товаров. Поэтому между таблицами ТОВАР и СДЕЛКА имеется связь "один–ко–многим" по полю КодТовара.
Теперь нужно создать связи между таблицами базы данных. Для этого поместим копии первичных ключей из родительской таблицы ( таблицы со стороны "один") в дочернюютаблицу ( таблицу со стороны "много"). Для организации связи между таблицами ТОВАР и СДЕЛКА поместим копию поля КодТовара из таблицы ТОВАР в таблицу СДЕЛКА. Для организации связи между таблицами КЛИЕНТ и СДЕЛКА поместим копию поля КодКлиента из таблицы КЛИЕНТ в таблицу СДЕЛКА. Для таблицы СДЕЛКА поля КодКлиента иКодТовара являются внешними (чужими) ключами. В результате получим следующую структуру базы данных.
Рис. 1.1. Пример структуры базы данных.
Лекция 2: Определение структуры данных Рассматриваются поддерживаемые в SQL типы данных и преобразование типов. Описывается создание пользовательских типов данных. Дается понятие выражения и оператора в SQL. Приводится определение основных объектов базы данных: таблиц, представлений, индексов, ограничений, правил, хранимых процедур, функций пользователя, триггеров.