Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Расширения реляционной модели.doc
Скачиваний:
1
Добавлен:
01.03.2025
Размер:
248.32 Кб
Скачать

Материал

Иногда супер типы изображают по другому:

6.Каскадное изменение и удаление сущностей. Пример:

Пусть предметная область подразумевает хранение информации о выполненных работах и исполнителях, но в случае:

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

ER диаграмма.

Исполнители

Id

ФИО

Работы

Id

Вид работы

Даты выполнения

Объем

Расценка

Исполнитель

1 ∞

Для ситуации с удалением экземпляров сущности «исполнитель», которая является опорной для сущности «работы», необходимо определить, что будет происходить с опирающимися экземплярами. В случае а при удалении экземпляра опорной сущности, атрибут связи «исполнитель» опирающиеся сущности должен получить NULL значение. Тогда база не получит аномальных данных, при этом будет достигать поставленные цели, сохранив все записи о выполнявшихся работах.

В случае b удаление «исполнителя» будет означать, что больше не требуется хранить никакой связанной с ним информации, а значит все опирающиеся экземпляры сущности «работы» надо удалить.

Паттерны проектирования бд.

Паттерны – шаблоны. Рецепт, по которому нужно выполнять проектирования в какой либо области.

1паттерн. Дерево

Назначение: необходимо хранить в БД упорядоченную совокупность данных, представимое деревом либо лесом.

id

узел

Родитель

1

A

NULL

2

Z

NULL

3

B

1

4

C

1

5

D

4

6

E

4

7

F

5

Узел


1

2

Узел

Ребра

паттерн. Граф

id

Узел

1

A

2

B

3

C

4

D

5

E

Id1

id2

1

3

2

5

3

3

4

3

5

5

Если граф ориентированный, то в таблице ребер принимаются договоренность: какой индификатор(id) является источником, какой приемником ребра.

Если неориентированный, то

  1. В таблицу ребер вносятся пары ( Vj, Vi ),( Vi, Vj ), что эквивалентно ориентированному графу двусторонне ориентированными ребрами.

  2. (Vi,Vj)  (Vj,Vi), ребро (Vi, Vj) считается равносильным ребру (Vj,Vi), при этом в таблицу вносится одна пара, но при этом усложняется логика запросов выборки.

Задачи проектирования с применением графа.

Задача 1. База МЧС

В городе существует множество объектов снабжаемых теплом от котельных. Каждый объект имеет теплопотребление, характеризуемое целым числом. Каждая котельная имеет мощность теплогенерации, характеризуемую целым числом. Объект может быть запитан от нескольких котельных одновременно. Котельная может питать несколько объектов одновременно. Объекты разбиты на группы:

-промышленные предприятия

-образовательные учреждения

-больницы и т.д.

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

50 50

**

100 50

*

100

150 Ситуация 1 Ситуация 2

Решение: при проектировании информационной системы, решающей данную систему, появляется неявная сущность «теплотрасса». Теплотрасса соединяет объект и котельную, при этом нужно отличать ситуации 1 и 2. В случае один при разрыве в * объект полностью теряет тепло, а ** - в угнетение.

- тепло узел

- точка включения

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Прием «Таблица соответствия»

Часто, в результате взаимодействия разных систем возникает задача установления отображения объектов одной системы на объекты другой системы. Например, бухгалтерская база содержит справочник сотрудники, при этом при увольнении записи не удаляются, а при приеме создается новая запись. Таким образом, для одного и того же человека в базе «сотрудник» существует несколько записей.

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

Пример: построить сравнительные графики показывающие динамику нагрузки преподавателя и динамику его з/п. В этом случае, запрос на выборку средней нагрузки преподавателя в секции where будет содержать условие lector_id = $id. А запрос к бухгалтерской базе будет содержать id in($id[0]…$id[n]).

Паттерн «Сущность с накоплением и промежуточные итоги»

Пусть необходимо хранить в базе информацию об объектах, подлежащих количественному и суммарному подсчету (суммовому учету).При этом в этой же базе необходимо хранить информацию о приходных и расходных операциях с этими объектами. Оптимальным решением является сущность с накоплением. Например, сущность склад, хранящая кортежи идент, дата, кол-во и сумма и идентификатор товара, как внешний прич. При этом в случае прихода оп колво и сумма > , при расх. оп -отрицательны

Пример: при этом при приходе – количество сумма положительна.

Склад

- - - - - - -

Id

Data_op

Q_op

Sum_op

Good_id

id

Data_op

Id_good

q_op

Sum_op

1

2

3

01.09

12.09

2.09

Авторучка

Авторучка

карандаши

1000

-100

500

1000

-100

5000

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

Чтобы посчитать какой-то момент в будущем, остаток товаров на складе, необходимо построить запрос с агрегатом SUM() по колонкам q_op и sum_op с группировкой по колонке id_good.

Авт 900 900

Кар 500 5000

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

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

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

Замечание 1. Промежуточные итоги требует дополнение к логике функционирования системы. Необходимо запретить ввод операций с датой более ранней, чем последние промежуточные итоги. Либо, если это необходимо, то после ввода пересчитывать промежуточные итоги.

Замечание 2. В такой системе важным становится понятие временной метки. Временная метка, т.к. операции, введенные одной датой могут отличаться по времени введения, т.е. нужно соотносить операции с формированием промежуточных итогов с точностью до секунды.