Правила Джексона для перехода от модели Чена к реляционной модели. Реляционная модель данных. 12 правил Кодда

Вид материалаДокументы

Содержание


1 вариант - файловый сервер.
2 вариант – удаленный доступ.
3 вариант – сервер Базы Данных.
Рассмотрим операторы для программирования хранимых процедур.
4 вариант – сервер приложений.
Рассмотрим пример использования оператора поиска на примере БД о поставщиках, деталях и поставках.
10. Индексация. Достоинства и недостатки. Примеры.
11. В-дерево. Добавление и удаление элементов.
12. Методы прямого доступа.
13. Архитектуры БД.
Ядро – концептуальная модель
15. Модель Чена.
16. Примеры бинарных связей.
17. Правила Джексона для перехода от модели Чена к реляционной модели.
18. Реляционная модель данных. 12 правил Кодда.
Подобный материал:
1   2   3

1 вариант - файловый сервер.


Введем обозначения: К – клиент, С – сервер.

К выполняет 1,2,4 части, а на С содержится информация, необходимая для запроса, т.е. С выполняет 3 часть.

запрос

К С

ответ-файл

В данной технологии основная нагрузка падает на клиента.

2 вариант – удаленный доступ.


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




Запросы пишутся на динамическом SQL. А в ответ получаем ту порцию информации, которую запросили, эта порция информации называется курсором.

Динамический SQL - это операторы SQL, которые передаются и выполняются не сервере.

Имеют место следующие операторы:

Prepare имя_оператора from строка

Select

Insert

Delete

Update

Execute имя_оператора – позволяет выполнить запомненный на сервере оператор;

Drop имя_оператора – позволяет удалит оператор;

Эти операторы передаются в интерактивном режиме, а если хотим записать в рамках какой-то программы, то, например на Паскале, это будет выглядеть так:

Exec sql “sql оператор”.

Описание курсора на SQL:

Declare имя_курсора [scroll] cursor for подзапрос [for update].

Курсор может быть обычным, то есть просматриваемым в одном направлении, от начала к концу, если стоит scroll, то просматривать курсор можно в любом направлении. Если стоит for update, то это значит, что курсор изменяемый, все изменения будут запоминаться на сервере.

Операции с курсором:

Open имя_курсора – позволяет получить курсор;

Fetch имя_курсора – позволяет перейти к следующей записи курсора, если перед именем курсора поставить Last, то перейдем к последней записи, First – к первой записи, Current к текущей;

Close имя_курсора – закрытие курсора, но он остается определенным;

Free имя_курсора – удаление курсора.


3 вариант – сервер Базы Данных.







Бизнес-правила хранятся на сервере в виде хранимых процедур. Хранимые процедуры – это программы, написанные на некотором языке хранимых процедур с SQL вставками. Их можно написать заранее и поместить в библиотеку.


Рассмотрим операторы для программирования хранимых процедур.
  • Create имя_процедуры (параметры)

[return список выходных данных]

тело

End procedure - создание процедуры;
  • Execute procedure имя (аргументы)[into список переменых] -– выполнение процедуры, созданной заранее;
  • drop procedure имя – удаление хранимой процедуры;
  • define список переменных – позволяет объявить переменные, которые являются локальными в хранимой процедуре;
  • call имя (аргументы) into список переменных – позволяет вызвать другую процедуру;
  • переменная:=выражение – присвоение;
  • if условие then оператор [else оператор] end if – условный оператор;
  • операторы цикла

for переменная:=целое1

to целое2 step целое

end for


while условие

тело

end while


for each имя_курсора

операторы

end for each


Среди операторов ТЕЛА используются следующие:

Exit - позволяет выйти из цикла до его завершения;

Continue – позволяет начать выполнение цикла, не заканчивая предыдущий шаг;

System – позволяет выполнить команды ОС;

Return – позволяет сформировать результаты и вернуть их из процедуры;

Begin

. – блок, часть пограммы, в которой могут быть объявлены

. локальные переменные.

end

4 вариант – сервер приложений.





С помощью протокола API передается информация о том какие программы и в какой последовательности нужно выполнять.

В технологии клиент-сервер есть специальные активные программы, которые называют триггерами.

Триггер – это активная программа, которая не вызывается программистом, а активизирует сама себя в зависимости от условий, возникающих при обработке данных.
  • Create trigger имя событие_действие - создание триггера;
  • Drop trigger - удаление.

Запись события:
  • Insеrt on имя_таблицы – наступает тогда, когда в таблицу заносится информация;
  • Delete on таблица – наступает при удалении из таблицы;
  • Update of список_полей on имя_таблицы - возникает при изменении заданных полей в указанной таблице.

Действия бывают трех видов:
  • Before (оператор) – перед добавлением, удалением, изменением;
  • Foreach row (оператор) – для каждой строки таблицы;
  • After (оператор) после добавления, удаления, изменения.

В триггерах есть возможность сослаться на одно и тоже поле до изменения и после:
  • Referencing old as имя – запомнить до изменения;
  • Referencing new as имя – запомнить после изменения;

When (условие)(оператор) – задает дополнительные условия для работы с триггерами.

Пример.

Изменить статус поставщиков только в том случае, если новый статус не меньше старого и не больше 100%.

Нужно создать триггер, который будет обновлять статус:

Create trigger Sstat

Update of статус on Поставщики

Referencing old as c1

Referencing new as c2

Foreach row

When ( с1.статус >=с2.статус)

Execute procedure error (с1.статус,с2.статус)

When (с2.статус>100%)

Execute procedure error1 (с1.статус,с2.статус)


9. Оператор Select.


Оператор поиска данных в таблицах

distinct

Select all список_полей from список_таблиц

[where условие] [group by список_полей] [having условие]

[order by поля[asc,desc]] [union [all] подзапрос]


distinct – режим, исключающий повторяющиеся записи в ответе.

All – режим, при котором в ответ включаются все записи. По умолчанию принято all, его можно не указывать.

Если одновременно присутствует where и having, то сначала будет выполняться where.

Если присутствует where, having, group by, то сначала выполнится where, потом group by, а потом having.
  • Select список_полей - указывает имена полей, которые должны содержаться в ответе;
  • from список_таблиц – указывает имена таблиц, которые участвуют в запросе;
  • where условие – задает условие отбора записей в ответ;
  • group by список_полей – задает условие группировки записей, группировка – это операция разбиения на группы, каждая из которых содержит одинаковые значения в отмеченных столбцах;
  • having условие задает условие отбора групп, если нет group by, то это условие применяется ко всей таблице;
  • order by поля[asc,desc] – задает тип сортировки записей в ответе, asc – это сортировка по возрастанию, desc – по убыванию, по умолчанию ставится asc;
  • union [all] подзапрос позволяет объединить главный Select с результатом подзапроса, подзапросом называется вложенный оператор Select.


Рассмотрим пример использования оператора поиска на примере БД о поставщиках, деталях и поставках.
  1. Запрос - выдать информацию о всех деталях:

Select * from Детали 2 варианта

Select код_детали, вес, цвет, город from Детали

Звездочка * означает, что нужно выдать все поля из таблицы.
  1. Выдать номера всех поставляемых деталей:

Select distinct код_детали from Поставки
  1. Получит информацию о красных деталях, которые находятся в Лондоне:

Select * from Детали where цвет=’красный’ and город=‘Лондон’ order by вес DESC

Это конъюнктивный запрос, записи в ответе будут отсортированны по убыванию веса.


10. Индексация. Достоинства и недостатки. Примеры.


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

Индекс позволяет выполнить две работы:
  • Выполнить сортировку файла не перемещая физически его записи;
  • Ускорить поиск информации.

Пример.

Файл а1:

адреса

А1

А2

А3

A0

d

1

F

A1

a

2

M

A2

C

3

F

A3

B

4

M

A4

Z

3

M

A5

I

2

F

A6

J

2

M

A7

k

5

M


Организуем индексацию по полю А1, индекс будет плотный, т.е. индексируются все значения ключа.

Запишем файл упорядоченный по полю А1:

B

A1

адрес

B1

A

A1

B2

B

A3

B3

C

A2

B4

D

A0

B5

I

A5

B6

J

A6

B7

K

A7

B8

Z

A4

Создадим индекс второго уровня, для этого разбиваем индекс на группы по три записи:


A1

адрес

C

B1

J

B4

z

B7

В первом столбце записан старший ключ, во втором столбце младший ключ.

Рассмотрим, например поиск записи с ключом I.

Смотрим в последнюю таблицу и ищем где ключ больший I, это J, его адрес B4, теперь обращаемся ко второй таблице, находим тройку записей, у которой младший индекс B4, это тройка D,I,J, находим в ней I, смотрим какой она имеет адрес – A5, обращаемся в первую таблицу и находим запись с адресом А5.


Индекс с инвертированными списками.

Инвертированный список хранит список ключей для каждого значения где это значение встречается.


А3

Список адресов

F

A0, A2,A5

M

A1,A3,A4,A6,A7



11. В-дерево. Добавление и удаление элементов.


В-дерево – это сбалансированное дерево.

Основной недостаток индексов в том, что трудно вносить изменения, а дерево упрощает внесение изменений, а сбалансированность позволяет ускорить поиск.

В основе В-дерева лежат следующие аксиомы:
  • В-дерево порядка n содержит 2n ключей 2n+1 ссылку;
  • В –дерево растет от листьев к корню;
  • Путь от корня к листу содержит одно и тоже количество шагов;
  • Каждый узел заполняется не менее чем на половину, кроме корня.

Пример.

Пусть у нас есть дерево третьего порядка, с ключами 12, 8, 4, 9, 6, 13, 14, 16,100, 10.

Приходит ключ 12, его заносим в корень


12

П
8 12
риходит 8, 8 меньше 12


Приходит 4, места в корне нет, разбиваем на 2




Приходит 9, она больше 8, но меньше 12, 12 сдвигаем, перед ней записываем 9, приходит 6 она меньше 8, но больше 4, записываем ее после 4:




После того как придет 13, 14, 16, 100, 10 вид дерева будет следующим:




12. Методы прямого доступа.


Прямой доступ.
  • Основа метода – хеширование – вычисление адреса хранимой информации на основе некоторых ключей, т.е. части информации, которая нас интересует. Примером является телефонный справочник, где хеширование идет по буквам алфавита.
  • Инвертированные списки.

Существует 2 варианта:

1. Фамилия телефон

Фамилия телефон

Фамилия телефон

2. разбиение диска на блоки таким образом, что в каждом блоке информация с определенным ключом.

Примером может послужить картотека в библиотеке, например, один ящик с названиями книг от А до Н, второй ящик с книгами от О до Я.
  • Индексно–последовательный метод доступа. Пример – оглавление в книге.

Индекс – это таблица, состоящая из двух столбцов; в первом столбце в сортированном порядке находится ключ индексации (№ главы, параграфа); во втором столбце находятся ссылки той информации, которая соответствует ключам (№ страниц).


1

2

Глава 1

Стр.3

Глава 2

Стр.23



13. Архитектуры БД.


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

Физическая независимость – независимость хранимой информации от носителей, на которых располагается информация.

Логическая независимость – это независимость данных от программ их обработки.

Архитектура чаще всего трехуровневая:





Ядроконцептуальная модель – суммарное представление всех пользователей БнД.

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

Внешние модели в совокупности дают концептуальную модель.

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

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


15. Модель Чена.


ER-модель (модель Чена).

Модель сущность-связь – используется для формального представления из предметной области.

Основные понятия:
  1. Сущность (объект) – активно действующий субъект в ПО, информация о котором важна с точки зрения данной ПО. Чаще всего сущность называется существительным.

В диаграмме Чена есть 2 варианта:
  • ER диаграммы-экземпляров
  • ER диаграммы-типов.

Тип объекта – это множество значений, которые могут принимать объекты, и множество операций, которые можно проводить с ними.

Работаем не с каждым объектом отдельно, а объединяем их в типы.

  1. Атрибут (свойство) – это характеристика, которая показывает в чем сходство или различие конкретных экземпляров объекта. При этом мы должны использовать столько свойств, чтобы можно было отличить экземпляры.


Ключом называется подмножество атрибутов, которые позволяют однозначно идентифицировать объект и никакое отбрасывание не обладает этим свойством.

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

  1. Отношения (связи) между сущностями.

Связи – это глаголы или отглагольные формы.


Так представлены диаграммы – типов:


сущности

атрибуты - первичный подчеркивают


отношения

Пример. Поставщики поставляют детали, нас интересует адрес и сколько деталей.


В предметной области две сущности

n поставка n

Поставщик постав- деталь

ляет


код пост код дет.

ФИО статус внешний ключ код нимено

степень детали вание

доверия %

код пост адрес адрес вес




повторяющиеся значения

и пустые не допускаются


Связь имеет свои атрибуты

В поставке ключом является комбинация: код пост. и код дет., а по отдельности - это внешние ключи. Существует также дополнительный код поставки – в данном случае это количество.


16. Примеры бинарных связей.


Виды связи

Оно показывает, сколько экземпляров одного объекта вступает в связь со сколькими экземплярами другого объекта.

Вид связи это не абсолютная характеристика и меняется в зависимости от предметной области, в которой и работает.


Виды связи бывают:


1:1

1:n (один ко многим)

n:1 (многие к одному)

n:n (многие ко многим)


Класс принадлежности указывает все ли объекты вступают в связь или есть такие, которые не связаны. Бывает:

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


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


Пример видов связей. (16 – вариантов)

Предметная область – преподаватель читает некоторые лекции.

Пример: тип связи один ко одному.

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

ER-диаграмма экземпляров

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

1 1

2 2

3 3

4 4

5

тогда диаграмм типов следующая



1 1


Другой вариант

- дисциплина читается обязательно одним преподавателем.










1 1


Третий вариант

- преподаватели все должны читать лекции, но есть предметы, которые не читаются.

1

2

3

4

5

6


1 1


Четвертый вариант

- преподаватель читает одну дисциплину, предмет читается один раз.





4



  1. 1



пример: тип связи один ко многим

- преподаватель читает несколько дисциплин, предмет читается не больше чем одним преподавателем.






1 n


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










1 n


-преподаватели читают несколько дисциплин, дисциплины и преподаватели все заняты, дисциплина читается одним преподавателем .













5

6
  1. n




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










5

6

7

  1. n



Пример многие к одному

- одна дисциплина может читаться несколькими преподавателями. Преподаватель не может читать несколько дисциплин.












n 1


- одна дисциплина может читаться несколькими преподавателями, все преподаватели заняты.







n 1




- одна дисциплина может читаться несколькими преподавателями, все предметы заняты.










n 1


- одна дисциплина может читаться несколькими преподавателями, все преподаватели и предметы заняты.










n 1


Пример многие ко многим

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







n n


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







n n


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




n n


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












n n


Рекурсивные связи

-возникают внутри одного и того же объекта.

Существует два типа рекурсивных связей:

-1:n;

-n:n;
  1. 1:n – например, отношение сотрудник- подчиненный на множестве подчиненных (но начальник тоже сотрудник).




n

1


Сотрудник в данном случае имеет роль начальника

Вводится понятие роль – это таблица, соединенная сама с собой. Для того чтобы различать объекты даем им разные роли.

n:n

Пример:

Описание структуры изделие, изделие состоит из сборочных единиц.

Изобразим граф изделия:







В данном графе 2,3,4 – это узлы, а 5,6,7 – это детали. Числа рядом с линиями показывают в каком количестве детали входят в узлы, например, в узел 2 входят 3 детали 5, 2 детали 6 и 1 деталь 3.

Роль деталь имеют те сборочные единицы, которые где-то применяются: 2-7.

Узел собирается из нескольких сборочных единиц: 1-4.между ними существует связь:




В реальном проектировании связь М:М представляется в виде трех отношений, причем между 1 3 – 1:М, между 2 и 3 – 1:М.

Таблица 1:

Сборочная единица

1

2

3

4

5

6

7



Таблица 2 (сборка):

Роль- узел (1)

Роль- деталь (2)

Количество (3)

1

2

2

1

3

3

1

4

2

2

3

1

2

5

3

2

6

2

3

5

2

3

7

2

4

6

1

4

7

3

Из этих таблиц:

№изделий = 1\2;

№деталей = 2\1;

№узла = 12.


17. Правила Джексона для перехода от модели Чена к реляционной модели.


7 правил Джексона.


Из модели Чена, используя эти правила, сразу можно получить нормальную форму.
  • Если отношения 1о:1о (индекс о означает обязательный класс принадлежности), то достаточно 1 таблицы, чтобы представить данное отношение.

Пример.

Растут деревья на участках леса:



Дерево

Участок

Площадь

Сосна

Бор

1

Береза

Роща

2

Осина

Лиственный лес

3
  • Если 1о:1н, то для представления информации необходимо 2 таблицы, отдельная таблица для необязательного класса принадлежности.

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



Участки

Площадь

Бор

1

Роща

2

Лиственный лис

3

Паленина

4



Дерево

Участок

Сосна

Бор

Береза

Роща

Осина

Лиственный лес



  • Если 1н:1н, то потребуется 3 таблицы.

Например, есть деревья, которые нигде не растут и есть участки, на которых ничего не растет.

Тогда 1 таблица описывает участки, 2 таблица описывает породы деревьев, 3 таблица является связующей, она содержит информацию о том, на каком участке какое дерево растет.
  • Если 1о или нн, то потребуется 2 таблицы.

В 1 таблицу записываем те объекты, которые относятся к типу связи М. Во вторую таблицу записываем собственно связь.
  • Если 1нн, то потребуется три таблицы.

Первая таблица описывает первый объект, вторая таблица описывает второй объект, а третья таблица описывает связь.
  • Если М:М, то всегда потребуется три таблицы.

Если n-объектных таблиц, и их надо связать, то всегда потребуется n+1 таблица, n таблиц отдельно описывают объекты, а n+1 таблица описывает связь между ними.


18. Реляционная модель данных. 12 правил Кодда.