Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Информатика_лекции_Саладаев.doc
Скачиваний:
55
Добавлен:
03.05.2015
Размер:
15.75 Mб
Скачать

Повторяющиеся группы

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

Например, «Кадры». Каждая запись описывает работника. При необходимости вести более исчерпывающую информацию, получим ситуацию, когда объем информации сильно меняется от человека к человеку (прежние места работы, командировки, научные премии, взыскания, напечатанные труды, заболеваемость и т.д.).

Если все это попросту включить в файл KADR, то число полей для каждой записи придется брать по максимуму. Например, ученый может иметь до 10 премий, тогда придется включать в общую таблицу 20 полей: ДАТА1, КОД1; ДАТА2, КОД2;… Большая часть значений этих полей будет пустой.

Подобную информацию, разную по объему для каждой записи основной таблицы называют повторяющимися группами. Решение задачи заключается в заведении отдельной таблицы со своим ключом для каждой повторяющейся группы. Например, для премий:

PREM

Г

Таб_ном

Дата_присуж

Код_прем

лавным ключом в этой таблице является

Таб_ном + Дата_присуж.

Если допустить, что в один день сотрудник может получить две премии (в юбилей), то в

главный ключ придется включить все поля. Одновременно придется ввести и

SL_PREM

Код_прем

Назв_прем

Рассмотрим еще один пример.

Необходимо вести список сплавов с указанием значений всех возможных параметров для каждого из них. Допустим число параметров равно 100 (плотность, теплоемкость, температура плавления, и т.д.). тогда таблица становится громоздкой:

Код_спл, Пар1, Пар2 , …., Пар100

или

Сплав

Код_спл

Пар1

Пар2

Пар100

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

Поэтому добавляется таблица, хранящая только имеющиеся параметры:

Код_спл, Код_пар, Знач_пар

Сплав-Параметр

Код_спл

Код_пар

Знач_пар

к которой нужен один словарь (справочник) параметров.

Единственный недостаток этой таблицы- многократное повторение кода одного и того же сплава.

Проблема дублирования информации в последовательности полей устраняется на уровне конкретной оболочки СУБД. То есть, например, при переходе к следующему одноименному полю работает автоповтор и т.п.

Общие поля в связанных таблицах

Пусть имеется таблица хоздоговоров «Договор» с полями: Номер_догов (ключ), Код_заказчика, Цена_догов, и т.д.:

Договор

Номер_догов (кл.)

Код_заказчика

Цена_догов

Договор может быть заключен на несколько лет. С целью месячного учета фактических затрат по каждому договору создана таблицы «Факт» с полями: Ном_дог, Год, Месяц, Цена_дог, Затраты_на_оборуд, и т.д. Ключ этой таблицы: Номер_дог + Год + Месяц:

Факт

Номер_догов (кл.)

Год (кл.)

Месяц (кл.)

Цена_догов

Затраты_на_оборуд

Получилась связанная пара таблиц в которой ключ таблицы «Договор» является старшей частью ключа таблицы «Факт». Обратим внимание на поле «Цена» в обоих таблицах - одинаковые поля и казалось бы нужно принимать меры по устранению избыточности. Но в данном случае это поле заполняется по смыслу независимо и должен быть механизм контроля за одинаковостью.

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