Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Введение в реляционные базы данных и язык SQL..pdf
Скачиваний:
10
Добавлен:
15.11.2022
Размер:
1.53 Mб
Скачать

3. п*т (многие-ко-многим). Например, в таком отношении друг к др находятся сущности "Поставщик" и "Товар":

Поставщик(номер поставщика, название, ИНН, адрес, ...) Товар(номер товара, название, сорт, ...)

Поайс(номер поставщика. номер товара, количество, цена, ...)

Следует отметить, что для реализации отношения данного типа необходима дополнительная ассоциативная сущность (таблица "Прайс").

Каждая торговая фирма с момента возникновения определяет свой ассортимент товаров, информация о которых заносится в таблицу "Товар" Затем для каждого товара находятся поставщики, информация о которых заносится в таблицу "Поставщик" При этом в таблицу "Прайс" попадает информация о том, кто из поставщиков какой товар в каком количестве и по какой цене может поставить. Может оказаться, что один поставщик поставляет только один товар и по одной цене (одна запись в таблице "Прайс"). Второй поставщик тоже поставляет только один товар, но в зависимости от количества по разным ценам (несколько записей в таблице "Прайс"). Третий поставщик поставляет много товаров по разным ценам (несколько записей в таблице "Прайс") и т.д. Тогда с другой стороны получится, что какой-то товар поставляется только одним поставщиком, второй товар поставляется несколькими поставщиками, а третий товар пока вообще никем не поставляется. Таким образом, одной записи в таблицах "Поставщик" и "Товар" может соответствовать ноль, одна или несколько записей в таблице "Прайс", это означает что отношение многие-ко-многим между сущностями "Поставщик" и "Товар" реализуется через отношение "один-ко- многим" между сущностями "Поставщик" и "Прайс", а также "Товар" и "Прайс".

4.4. Категоризация сущностей

Сущность может быть разделена и представлена в виде двух и более сущностей-категорий, каждая из которых имеет данные как общие с другими, так и отличные от других. Сущность, расщепляемая на сущности-категории, называется общей сущностью.

В качестве примера общей сущности можно привести сущность "Контрагент", которую необходимо расщепить на сущности-категории "Юридическое лицо" и "Физическое лицо":

Контрагент(номер контрагента. тип, название, фактический адрес, ...) Юридическое лииоЫомер контрагента. ИНН, юридический адрес, ...) Физическое лииоЫомер контрагента. ФИО, паспорт, адрес прописки, ...)

Следует отметить, что, во-первых, в таблицах "Юридическое лицо" и "Физическое лицо" в качестве первичного ключа используется первичный ключ из таблицы "Контрагент", в таких случаях говорят, что первичный ключ из таблицы "Контрагент" мигрировал в таблицы "Юридическое лицо" и "Физическое лицо". Во-вторых, в таблицу "Контрагент" специально добавлено поле "Тип", по значению которого сразу можно определить в какой из таблиц-категорий искать дополнительные данные о данном контрагенте. Если такого поля не будет, то для

поиска дополнительных данных возможно придется перебрать все таблицыкатегории, которых в общем случае может оказаться гораздо больше, чем две.

4.5. Этапы проектирования

Проектирование РБД можно разделить на два этапа: логическое и физическое.

На этапе логического проектирования определяется количество таблиц, их структура и связи.

На этапе физического проектирования определяются типы и размеры полей таблиц.

4.5.1. Логическое проектирование

Последовательность логического проектирования может быть представлена следующим образом.

1. Выделяются стержневые таблицы.

Рекомендация: если какие-либо данные многократно употребляются в одной из таблиц или могут потребоваться сразу в нескольких таблицах, то эти данные следует выносить в стержневые таблицы, например, таблица "Город” в РБД "Клиенты" (рис. 3).

2.При необходимости проводится категоризация стержневых таблиц.

3.Определяются характеристические таблицы стержневых таблиц. Рекомендация: если какие-либо данные могут храниться не во всех строках

стержневых таблиц, то эти данные следует выносить в характеристические таблицы, например, таблица "Сотрудник" в РБД "Клиент" (рис. 3).

4.Определяются ассоциативные таблицы.

5.Определяются характеристические и ассоциативные таблицы 2-го, 3-го уровней и т. д.

6.Во всех таблицах выделяются все альтернативные ключи.

7.Определяются правила удаления данных.

4.5.2. Физическое проектирование

Типы полей (char, integer, float, decimal(p,q), date и др.) должны соответствовать их содержимому. Данные любого типа можно записать в поля типа char, однако это существенно замедлит их последующую обработку.

Длины полей должны быть оптимальными. Слишком длинные поля увеличивают размер базы данных и замедляют обработку данных. Слишком короткие поля не позволяют хранить данные необходимой длины.

Рекомендации:

1. Для значений первичных ключей удобно использовать целые положительные числа.

2.В случае неопределенности для числовых полей следует использовать

тип float.

3.Поля, предназначенные для хранения номеров документов, лучше делать

символьными.

4.6. Условные обозначения, применяемые при проектировании РБД

Условные обозначения приведены в транскрипции ER (Entity Relation - связи сущностей). На практике могут использоваться и другие обозначения.

Следует отметить, что набор допустимых типов данных зависит от используемой СУБД.

1. Ключи:

рк - первичный ключ; fk - внешний ключ;

ак - альтернативный ключ.

2.Типы полей и их размер:

char(n)

- символьное поле длины п (п<255);

integer

-

целое число;

 

float

-

число с плавающей точкой;

 

decimal(p, q)

-

число с плавающей точкой, где р - длина числа, q - количество

date

 

знаков после запятой;

 

-

дата.

 

3. Таблицы (entity):

 

Название таблицы

 

первичный ключ

 

поле I

 

 

 

поле 2

 

 

 

4. Связи (relation):

 

 

Таблица 1

Таблица 2

первичный ключ Т1

первичный ключ Т2

поле 1

 

— ПУ -j

внешний ключ

поле 2

 

 

поле 1

Здесь ПУ - символ правила удаления: R - ограниченное (англ, "restricted"); С - каскадное (англ, "cascade"). Необходимо отметить, что стрелки, обозначающие связи между таблицами, следует направлять от таблицы с внешним ключом к таблице с первичным ключом.

4.7. Примеры проектов РБД

Проект РБД "Поставки" приведен на рис. 7. Проект РБД "Клиенты" приведен на рис. 8.

Рис. 7. Проект реляционной базы данных "Поставки"

Рис. 8. Проект реляционной базы данных "Клиенты"

Упражнения

1.В п. 2.3 сформулированы два правила удаления. Как вы думаете, существуют ли еще правила удаления, не нарушающие целостность РБД?

2.В п. 4.4. приведен пример категоризации сущности "Контрагент":

Контрагент(номер контрагента, тип, название, фактический адрес, ...) Юридическое лииоЫомер контрагента, ИНН, юридический адрес, ...) Физическое лиио(номео контрагента. ФИО, паспорт, адрес прописки, ...)

Как вы думаете, можно ли в качестве названия контрагента использовать фамилию и инициалы физического лица? Будет ли это нарушением принципа нормализации? Ускорит ли это выборку информации о контрагентах из базы данных?

3. В таблице "Предметы и темы" представлен список предметов указанием соответствующих тем и преподавателей, которые эти темы могут прочитать. Определите, в какой нормальной форме находится эта таблица.

Предметы и темы

Предмет

Преподаватель

Физика

Иванов И.И.

Физика

Иванов И.И.

Физика

Петров П.П.

Физика

Петров П.П.

Математика

Иванов И.И.

Математика

Иванов И.И.

Тема

Математическая физика Термодинамика Математическая физика Термодинамика Дифференциальные уравнения Тригонометрия

4.Как вы думаете, бывают ли между двумя сущностями отношения типа один-к-двум, один-к-трем? Приведите примеры.

5.Первичные ключи условно можно разделить на два типа:--абстрактные и смысловые. Абстрактные первичные ключи не содержат никакой информации о сущности, данные о которой хранятся в таблице РБД, например, первичный ключ, образованный полем "Номер фирмы" в таблице "Фирма" в РБД "Поставки" (рис. 1). Смысловые первичные ключи наоборот содержат информацию о сущности, данные о которой хранятся в таблице РБД, напримЬр, первичный ключ, образованный полями "Заказчик", "Дата заказа" и "ISBN" в таблице "Заказ" в РБД "Заказы книг" (рис. 5). Как вы думаете, в чем причины того, что на практике чаще используют абстрактные первичные ключи, а не смысловые? С другой стороны, в чем недостатки абстрактных первичных ключей (например, одиночных полей типа integer) по сравнению со смысловыми первичными ключами?

6.Ниже приведен пример справочника деталей и их цветов.

Отношение многие-ко-многим между деталями и цветами представлено таблицей "Цвет детали" Для таблиц "Цвет" и "Цвет детали", а также "Деталь" и "Цвет детали" используются ограниченные правила удаления. Как вы думаете, какие проблемы могут возникнуть у пользователя при работе с таким справочником, если правила удалений оставить без изменений? Как, на ваш взгляд, стоило бы изменить правила удаления?

7. Известно, что структура какого-либо предприятия может быть представлена в виде дерева с заранее неизвестным количеством уровней вложенности: завод состоит из цехов и служб, цеха в свою очередь состоят из участков, а службы - из отделов, участки и отделы разбиваются на еще более мелкие структурные подразделения и т.д. Создайте проект РБД, которая позволит хранить подобную структуру.

8. Используя условные обозначения из п. 4.6., создайте проекты РБД по следующим темам:

1)детский сад;

2)расписание учебных занятий;

3)библиотека;

4)продовольственный магазин;

5)справочник автомобильных дорог;

6)отдел кадров;

7)технологический процесс;

8)бухгалтерия;

9)сберегательный банк;

10)ценные бумаги;

11)железнодорожная касса;

12)расписание авиарейсов;

13)бюджет предприятия;

14)склад товаров;

15)истории болезней пациентов;

16)атлас государств и городов мира;

17)телевизионная программа;

18)план проведения олимпийских игр;

19)устройство персонального компьютера; 20) косметический салон.

Проект должен содержать не менее 5 таблиц. В каждой таблице должны

быть определены типы всех полей и все альтернативные ключи. Для каждой связи должно быть определено правило удаления.