Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка по ИТ.doc
Скачиваний:
6
Добавлен:
29.08.2019
Размер:
3.99 Mб
Скачать

Разработка структуры многотабличной бд

Цель работы: изучение и закрепление на практике методов разработки структуры многотабличной БД.

Методические указания

Необходимость разбивки всей БД на несколько таблиц обусловлена характером обрабатываемой информации (не имеет смысла хранить в одной таблице сведения о работниках и информацию о производимой продукции) и требованиями к свойствам хранимой информации (отсутствие дублирования и оперативность доступа).

Разработка структуры БД является достаточно сложной задачей и решается формализованными методами, приводящими к созданию корректной структуры. В данных методических указаниях предлагается упрощенная методика данного процесса.

Задание: разработать структуру БД, хранящую следующие сведения о заводе (рис. 14.1):

ЗАВОД (деталь, завод-поствавщик_детали, стоимость_детали, страна_местона-хождения_завода-поставщика, цех_использующий_деталь, начальник_цеха, служа-щий_предприятия, дата_поступления_служащего_на_работу, зарплата_служаще-го, цех_где_он_работает).

Рис. 14.1

Анализ информации показывает, что ее можно разбить на несколько групп взаимосвязанных показателей, каждая из которых описывает один из объектов, входящих в информационное описание завода. Разбивка производится с помощью понятия функциональной зависимости (ФЗ).

О п р е д е л е н и е. Два показателя А и В находятся в функциональной зависимости АВ, если значения показателя В зависят от показателя А (определяются значениями показателя А). Например, стоимость детали (В) определяется наименованием детали (А), а не наоборот, так как несколько деталей могут иметь одинаковую стоимость.

В соответствии с определением можно выделить следующие виды ФЗ среди указанных показателей (рис. 14.2). Анализ полученных ФЗ показывает, что каждая из них охватывает описание объектов одного типа (одной группы).

ДЕТАЛЬ: деталь  завод-поставщик_детали

стоимость_детали

цех_использующий_деталь

ЦЕХ: цех_использующий_деталь  начальник_цеха

СЛУЖАЩИЙ: служащий_предприятия  дата_поступления_на_работу

зарплата_служащего

цех_где_он_работает

ПОСТАВКА: завод-поставщик_детали  страна_местонахожде-ния_завода

Рис. 14.2

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

Проведенное разбиение позволяет перейти к структуре БД ЗАВОД в виде четырех таблиц с одноименными названиями, содержащими перечисленные в ФЗ поля (рис.14.3). Каждая строка одной таблицы будет представлять описание одного объекта конкретной группы.

На следующем этапе требуется уточнить названия полей таблиц и их тип. Названия должны быть краткими (не длиннее значений, чтобы разместить на экране компьютера при просмотре таблицы большее число полей), но отображать смысловое назначение данных (рис. 14.4). Типы полей указаны в соответствии с обозначениями, принятыми в литературе для краткости:

А<число> - символьный;

S – целый;

N – вещественный;

$ - денежный;

D – дата;

B – логический (да/нет);

М - комментарии.

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

БД ЗАВОД

ДЕТАЛЬ:

деталь

завод-поставщик_детали

стоимость_детали

цех_использующий_деталь

ЦЕХ:

цех_использующий_деталь

начальник_цеха

СЛУЖАЩИЙ:

служащий_предприятия

дата_поступления_на_работу

зарплата_служащего

цех_где_он_работает

ПОСТАВКА:

завод-поставщик_детали

страна_местонахождения_завода

Рис. 14.3

В предложенной структуре БД может вызывать сомнение необходимость наличия таблиц ЦЕХ и ПОСТАВКА. Однако введение еще двух полей: начальник_цеха и страна_местонахождения_завода, - в таблице ДЕТАЛЬ приведет к дублированию информации в этих полях при повторении значений полей цех_использующий_деталь и завод-поставщик_детали, что нарушает требование к отсутствию дублирования.

Для повышение оперативности работы с информацией записи в таблицах сортируются (упорядочиваются) по одному или нескольким полям. Сортировка символьных полей производится в алфавитном порядке, числовых и полей дат - по возрастанию или убыванию значений.

Поля, по которым сортируются записи таблицы, называются ключами. В реляционных таблицах все значения ключевых полей должны различаться, что обеспечивает уникальность каждой записи таблицы. Обычно в качестве ключей выбираются показатели (атрибуты), стоящие в левой части ФЗ. В соответствии с общепринятой нотацией ключевые поля отмечаются символом * в столбце типов, они обычно ставятся первыми в описании структуры таблицы (рис. 14. 5).

БД ЗАВОД

Таблица ДЕТАЛЬ

Название полей

Тип полей

Деталь

Деталь

А20

завод-поставщик_детали

Завод

А15

стоимость_детали

Стоимость

$

цех_использующий_деталь

Цех

S

Таблица ЦЕХ

Название полей

Тип полей

цех_использующий_деталь

Цех

S

начальник_цеха

Начальник

А20

Таблица СЛУЖАЩИЙ

Название полей

Тип полей

служащий_предприятия

ФИО

А20

дата_поступления_на_работу

ДПР

D

зарплата_служащего

Зарплата

$

цех_где_он_работает

Цех

S

Таблица ПОСТАВКА

Название полей

Тип полей

завод-поставщик_детали

Завод

А15

Страна_местонахождения_завода

Страна

À15

Рис. 14.4

Указанное разбиение во многом определяется существующей практикой работы предприятия. Если, например, одинаковые детали поставляются разными заводами, то для их полной идентификации необходимо указывать еще и поставщика, т. е. первая ФЗ будет иметь вид (рис. 14.6)

БД ЗАВОД

Таблица ДЕТАЛЬ

Название полей

Тип полей

Деталь

А20*

Завод

А15

стоимость

$

Цех

S

Таблица ЦЕХ

Название полей

Тип полей

Цех

S*

начальник

А20

Таблица СЛУЖАЩИЙ

Название полей

Тип полей

ФИО

А20*

ДПР

D

зарплата

$

Цех

S

Таблица ПОСТАВКА

Название полей

Тип полей

Завод

А15*

Страна

À15

Рис. 14.5

ДЕТАЛЬ: деталь, завод-поставщик_детали  стоимость_детали

цех_использующий_деталь

Рис. 14.6

Тогда оба первых поля войдут в ключ таблицы ДЕТАЛЬ (рис. 14.7).

При этом предполагается, что каждая деталь поставляется только в один цех. Если же допускается поставка одной и той же детали в несколько цехов, то данная ФЗ разбивается на две (рис. 14.8), что, в свою очередь, приводит к образованию двух таблиц (рис. 14.9)

Таблица ДЕТАЛЬ

Название полей

Тип полей

Деталь

А20*

Завод

А15*

Стоимость

$

Цех

S

Рис. 14.7

ДЕТАЛЬ: деталь, завод-поставщик_детали  стоимость_детали

ПОСТАВКА: деталь, завод-поставщик_детали, цех_использующий_деталь

Рис. 14.8

Видно, что в таблице ПОСТАВКА все поля стали ключевыми.

Таблица ДЕТАЛЬ

Название полей

Тип полей

Деталь

А20*

Завод

А15*

Стоимость

$

Таблица ПОСТАВКА

Название полей

Тип полей

Деталь

А20*

Завод

А15*

Цех

S*

Рис. 14.9

Более сложная задача возникает, когда в объединении взаимосвязанных показателей нельзя выделить ключ. Например, в таблице ПРИХОД (рис. 14.10) нельзя достичь уникальности каждой записи, если одна и та же фирма может поставить несколько одинаковых партий товара за одинаковую стоимость. Данная проблема может быть решена путем введения в таблицу еще одного, фиктивного, поля, придающего уникальность каждой записи (рис. 14.11). Описание структуры такой модифицированной таблицы представлено на рис. 14.12.

ПРИХОД

Фирма-поставщик

Количество товара

Стоимость товара

Сиблес

234

345 890

Премьер

56788

23 479

Кратер

2372

789 300

Сиблес

234

345 890

Рис. 14.10

ПРИХОД

Номер поставки

Фирма-поставщик

Количество товара

Стоимость товара

1

Сиблес

234

345 890

2

Премьер

56 788

23 479

3

Кратер

2 372

789 300

4

Сиблес

234

345 890

Рис. 14.11

Таблица ПРИХОД

Название полей

Тип полей

Номер поставки

S*

Фирма-поставщик

А15

Количество товара

N

Стоимость товара

$

Рис. 14.12

Проведенный анализ вариантов показывает, что проектирование структуры БД носит творческий характер и требует хорошего знания предметной области, информацию о которой предполагается хранить в БД.

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

Анализ разработанной структуры показывает, что одинаковая информация по полю завод хранится в таблицах ДЕТАЛЬ и ПОСТАВКА, по полю цех - в таблицах ДЕТАЛЬ, ЦЕХ и СЛУЖАЩИЙ. При этом указанным требованиям к эталонным полям отвечают показатели цех (таблица ЦЕХ) и завод (таблица ПОСТАВКА), так как именно в эти таблицы на первом этапе создания БД заносится вся информация о цехах предприятия и заводах-поставщиках, а затем только уточняется. Результат связывания показан на рис. 14.13.

Достоверность информации в БД может быть повышена путем введения дополнительных ссылочных таблиц с эталонными полями. Так, например, при заполнении поля страна в таблице ПОСТАВКА могут быть введены значения «Франция» и «франция», являющиеся с точки зрения СУБД разными государствами. Поэтому целесообразно ввести ссылочную таблицу СТРАНЫ с единственным полем страна (рис. 14.14) и связать ее с таблицей ПОСТАВКА (рис. 14.15).

Корректность обрабатываемой информации может быть также повышена путем введения на последнем этапе проектирования структуры БД явных ограничений на значения полей таблиц (числовых, дат и т.д.).

В рассматриваемом примере имеет смысл ввести ограничения на значения полей стоимость (она не может быть отрицательной и имеет ограничения сверху), зарплата, цех (номер цеха) и ДПР.

ПОСТАВКА

ЦЕХ

завод

Страна

цех

начальник

A15*

A15

S*

A20

ДЕТАЛЬ

СЛУЖАЩИЙ

Деталь

завод

Стоимость

цех

ФИО

ДПР

зарплата

цех

A20*

A15

$

S

A20*

D

$

S

Рис. 14.13

Таблица СТРАНЫ

Название полей

Тип полей

Страна

А15*

Рис. 14.14

СТРАНЫ

страна

А15*

ПОСТАВКА

завод

страна

A15*

A15

Рис. 14.15

Окончательный результат разработки структуры БД представлен на рис. 14.16. В первой строке каждой таблицы указаны названия полей, во второй - тип, в третьей - ограничения, которые носят условный, но осмысленный характер.

С учетом вышеизложенного общая методика разработки структуры БД представляет последовательность следующих этапов:

  1. Разбивка на основе ФЗ всех показателей БД на логически связанные группы описания объектов одного типа.

  2. Определение на основе проведенного разбиения структуры БД (перечня именованных таблиц, названия полей и их типов).

  3. Установление взаимосвязи таблиц по полям.

  4. Введение ограничений на значения полей.

В СУБД Access связи между таблицами создаются, удаляются и наглядно отображаются в окне Схема данных, раскрываемом нажатием кнопки (Схема данных) на панели инструментов.

Структура БД ЗАВОД

СТРАНЫ

Страна

А15*

ПОСТАВКА

ЦЕХ

завод

страна

цех

Начальник

A15*

A15

S*

A20

>0 и <20

ДЕТАЛЬ

СЛУЖАЩИЙ

деталь

завод

стоимость

цех

ФИО

ДПР

Зарплата

Цех

A20*

A15

$

S

A20*

D

$

S

>0 и <20 000

>01/01/1970

>0 и <4 000

Рис. 14.16

Для создания схемы данных или добавления в нее новых таблиц необходимо:

  1. Щелкнуть правой клавишей мыши в окне Схема данных;

  2. В раскрывшемся контекстном меню выбрать опцию Добавить таблицу;

  3. В раскрывшемся окне со списком таблиц дважды щелкнуть левой клавишей мыши по добавляемой таблице;

  4. Закрыть окно со списком таблиц;

  5. Захватить левой клавишей мыши связываемое поле одной из таблиц и перетащить его на связываемое поле другой таблицы;

  6. В появившемся окне Связи проверить корректность устанавливаемой связи и нажать кнопку Создать, что приводит к визуальному отображению установленной связи.

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

Аналогично удаляются и сами таблицы из схемы данных.

Выполнение лабораторной работы

А. На основе изложенной выше методики разработать структуру БД предметной области, определяемой соответствующим вариантом:

  1. служащий (ФИО), отдел его работы, местонахождение отдела, руководитель отдела, стаж работы служащего, его оклад, его зарплата по месяцам, подоходный налог по месяцам.

  1. абитуриент (ФИО), пол, школа, дата его рождения, оценки по трем вступительным экзаменам, будущая специальность, факультет, декан.

  2. студент (ФИО), группа, курс, факультет, выпускающая кафедра, ФИО заведующего кафедрой, месторасположение кафедры, телефон кафедры, домашний телефон студента, декан.

  3. наименование поставляемой продукции, шифр поставляемой продукции, единица измерения поставляемой продукции, цена единицы продукции, количество в очередной поставке, даты поставок, даты оплат, наименование поставщика, его адрес.

  4. сотрудник (ФИО), его табельный номер, шифр вида оплаты, плановый аванс, месячный оклад, процент премирования, отдел его работы, начальник отдела, домашний адрес начальника, домашний телефон начальника.

  5. название учебного курса, ФИО лектора, ФИО ассистента, их возраст, должность, стаж работы, место работы (кафедра), объем лекций в часах, объем лабораторных занятий в часах, ФИО зав.кафедрой, его рабочий телефон, номер аудитории-кабинета.

  6. ФИО водителя, класс водителя, номерной знак его автомобиля, марка автомобиля, номинальный расход топлива л/час данной марки, средняя скорость данной марки км/час, наименование груза, дата выезда, номерной знак автомобиля-перевозчика груза.

  7. сотрудник (ФИО), пол, количество иждивенцев, год рождения каждого ребенка, имя и пол ребенка, оклад сотрудника, процент премирования, отдел его работы, начальник отдела.

  8. наименование поставляемой продукции, единица измерения поставляемой продукции, цена единицы продукции, количество в очередной поставке, даты поставок, вид транспорта, наименование поставщика, транспортные расходы на поставку.

  9. название учебного курса, ФИО лектора, дата его рождения, должность, пол, место работы (кафедра), объем в часах курса, наличие экзамена, место проведения (аудитории), ФИО зав.кафедрой, его рабочий телефон.

  10. шифр поставляемой продукции, количество в очередной поставке, даты поставок, даты оплат, наименование поставщика, ФИО руководителя поставщика, страна поставщика, процент пошлины на поставляемую продукцию.

  11. ФИО водителя, табельный номер водителя, номерной знак его автомобиля, марка автомобиля, грузоподъемность данной марки, средняя скорость данной марки км/час, наименование груза, отправитель груза, номерной знак автомобиля-перевозчика груза.

  12. ФИО водителя, табельный номер водителя, номерной знак его автомобиля, марка автомобиля, грузоподъемность данной марки, местонахождение автомобиля (ремонт, рейс, автопарк), вес груза, отправитель груза, номерной знак автомобиля-перевозчика груза.

  13. сотрудник (ФИО), образование, количество иждивенцев, год рождения каждого ребенка, имя и пол ребенка, стаж работы сотрудника, отдел его работы, начальник отдела, адрес отдела, телефон отдела.

  14. табельный номер водителя, номерной знак его автомобиля, марка автомобиля, грузоподъемность данной марки, средняя скорость данной марки км/час, наименование груза, отправитель груза, получатель груза, номерной знак автомобиля-перевозчика груза.

  15. табельный номер водителя, марка автомобиля, грузоподъемность данной марки, средняя скорость данной марки км/час, номерной знак его автомобиля, наименование груза, отправитель груза, получатель груза, масса груза, номерной знак автомобиля-перевозчика груза.

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

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

  18. название учебного курса, ФИО лектора, его возраст, должность, стаж работы, кафедра, объем в часах курса, в каких аудиториях читается курс, ФИО зав.кафедрой, его рабочий телефон.

  19. ФИО водителя, табельный номер водителя, марка автомобиля, средняя скорость данной марки км/час, номерной знак его автомобиля, наименование груза, отправитель груза, получатель груза, масса груза, номерной знак автомобиля-перевозчика груза.