- •Базы данных. Плещеев в.В.
- •1.3.2. Типы моделей данных
- •1.3.4. Контроль целостности связей
- •1.3.5. Формы записи концептуальной модели
- •1.3.6. Иерархическая модель
- •1.4.Определение доменов атрибутов.
- •1.5. Определение первичных и вторичных ключей.
- •1.6. Определение суперклассов и подклассов для типов сущностей.
- •1.7. Создание er‑диаграмм для отдельных пользователей.
- •2.6. Создание er‑диаграмм для отдельных пользователей.
- •3.4. Создание er‑диаграммы глобальной логической модели.
- •4. Создание глобальной логической модели в среде целевой субд.
- •6. Разработка механизма защиты.
1.3.6. Иерархическая модель
Иерархическая модель (дерево) представляет собой связанный ориентированный граф, у которого любой подчиненный узел (кроме корневого) имеет только один исходный узел (рис. 1.3.6.1).

Рис. 1.3.6.1. Пример иерархической структуры
Рассмотрим ряд терминов иерархической модели.
Высота, вес и момент дерева‑ число уровней, листьев и узлов в дереве.
Путь доступа ‑совокупность узлов и дуг, проходя которые можно прийти к искомому узлу.
Сцепленный ключ ‑соединение в один ключ всех ключей узлов на пути доступа к искомому узлу в порядке их обхода. Такой ключ обеспечивает наиболее простой и быстрый доступ к искомому узлу.
Сбалансированное дерево- дерево, в котором любой исходный узел имеет одинаковую степень (одинаковое число ветвей или подчиненных узлов).
Бинарное (двоичное) дерево‑ сбалансированное дерево с исходными узлами степени два. Любое дерево можно преобразовать в бинарное дерево. Поиск данных в бинарном дереве наиболее быстрый.
Один экземпляр дерева хранится в виде списка данных узлов, полученного левосторонним обходом дерева (сверху вниз и справа налево).
Основные операции над записями (узлами): поиск нужной записи по ключу, переход от исходного к первому подчиненному узлу, переход к следующему подобному узлу, возврат к исходному узлу, удаление текущего узла и всех его подчиненных, вставка нового узла и обновление.
Достоинство:быстрота доступа к данным.Недостатки:сложность и жесткость (пока не будет создана логическая модель базы нельзя разрабатывать прикладные программы, и изменение структуры базы приводит к необходимости модифицировать прикладные программы).
Примеры СУБД:IMS, PC/Focus, Team‑Up, Data Edge, Ока, ИНЭС, МИРИС.
Индексирование таблиц. Определение индекса и его назначение. Типы индексов.
Для таблиц создаются индексы (индексированные таблицы). Для некоторых СУБД (FoxPro, dBase, Paradox) индексы могут храниться на диске в отдельных индексных файлах. Индексный файл содержит записи, каждая из которых содержит два значения: индекса и адреса записи таблицы со значением данного индекса. Адреса могут быть абсолютными (номер цилиндра, дорожки, сектора), относительными (номер записи в таблице) или символическими. Записи в индексном файле отсортированы по возрастанию или убыванию значения индекса.
Индексом может быть поле или группа полей (составной индекс) или свертка индекса в виде хеш‑кода (шифрованное значение ключа). Хеш‑код уменьшает размер индекса, но требуется дополнительное время на шифрование и дешифрование специальными программами (процедурами хеширования или рандомизации). Индексные файлы могут быть многоуровневыми.
Обычно выделяют четыре типа индексов:
Первичный (Primary) который является уникальным, служит для связи с другими таблицами. У таблицы может быть только один первичный индекс. Индексные поля не могут иметь пустые значения.
Вторичный, или кандидат (Candidat), аналогичный первичному, но не может быть им, так как место первичного индекса уже занято.
Уникальный (Unique) индекс хранит неповторяющиеся значения индекса, т.е. дублирующиеся значения игнорируются.
Регулярный (Regular) индекс хранит значения индексов всех записей таблицы. Обычно такой индекс является внешним ключом.
Наличие индекса позволяет:
обработать таблицу в нужной последовательности (логическая сортировка базы);
осуществить прямой поиск нужной записи по ее индексу путем перебора записей индексного файла и сравнения текущего индекса (свертки) с искомым значением индекса (свертки после ее получения по искомому индексу). После нахождения записи в индексном файле выбирается адрес, и запись таблицы с данным адресом становится текущей. Если используется свертка и имеются синонимы, то дополнительно просматривается цепочка синонимов и выбирается запись с искомым значением индекса. Так как размеры индексных файлов небольшие, они хранятся в оперативной памяти и их просмотр ведется в оперативной памяти очень быстро;
связать родительскую таблицу с дочерней таблицей по индексу;
организовать быстрый последовательный поиск группы записей таблицы по условию их отбора путем использования фильтрованного индекса или использовать индексы вместо полей записей таблицы в условиях отбора записей. Например, если имеется индекс по полю “Фамилия” и нужно найти запись о сотруднике Иванове, то будет просматриваться не запись таблицы, а индексный файл, что значительно быстрее.
Процессом просмотра и доступа к базе данных управляет только один индексный файл (главный). Однако при изменении информации в таблице обновляются все индексные файлы таблицы. Главный индексный файл можно определить при помощи специальных команд управления индексами (для FoxPro: Set Order, Set Index).
Связывание таблиц. Назначение, типы связей и средства установки связей.
Таблицы обычно связываются попарно через ключи связи (п. 1.3.3). Ключи связи должны быть одинакового типа в родительской и дочерней таблицах. Связи бывают постоянные и временные. Постоянные связи устанавливаются до выполнения прикладной программы при создании логической модели данных (обычно визуальными средствами). Этими связями можно пользоваться в прикладной программе. Временные связи устанавливаются при выполнении прикладной программы (в FoxPro командой Set Relation) и удаляются после ее выполнения. Использование связанных таблиц существенно упрощает пользователю обработку таблиц (так, перемещаясь по родительской таблице, происходит автоматическое перемещение по ее дочерним таблицам по условию равенства ключей связи), автоматически обеспечивая контроль целостности (п. 1.2.4). Дочерняя таблица должна иметь индекс по ключу связи.
Основные команды языка запросов SQL с примерами.
Запрос представляет собой требование, определяющее выборку нужных данных из одной или нескольких таблиц базы, удаление или изменение данных, создание новых таблиц. Существуют два типа языков описания запросов: язык запросов по образцу QBE (Query By Example) и структурированный язык запросов SQL (Structured Query Language).
Язык QBEпредполагает использование визуальных средств построения результирующей таблицы из первоначально пустой таблицы путем выборки и связывания нужных исходных таблиц и запросов, перетаскивания мышкой нужных колонок, формирования мастерами расчетных колонок и условий отбора записей, сортировки, группировки и агрегирования данных. Примером использования QBE является запросная форма СУБД Access.
Язык SQL(стандарт SQL‑92) предполагает использование командных средств. Хотя синтаксис команд языка SQL и достаточно унифицирован для различных СУБД, но есть некоторые отличия в деталях. Существуют статический SQL (команды SQL включаются в выполняемый модуль после компиляции) и динамический SQL (команды SQL формируются в процессе выполнения программы и выполняются в интерпретирующем режиме). В результате выполнения запроса на выборку формируется новая таблица, называемая представлением (View), к которой устанавливается соответствующий указатель, называемый курсором (Cursor). Курсор служит для ссылки на нужное представление в командах открытия, перемещения по записями и закрытия нужного представления (п. 4.3.6).
Основные команды SQL
Selectявляется мощным средством создания запросов на выборку информации. Приведем ее предварительный синтаксис:
Select<поля, выражения или *>From <исходные таблицы>
Where<условие отбора записей>Group By<поля для группировки>
Having<условие отбора группы>Order By <поля для сортировки>
Рассмотрим фразы команды (не все фразы обязательны).
Select [Distinct] <выражение> [[As] <псевдоним>] [, ...]
From <таблица> [<тип связи> Join <таблица> On <условие связи>]...
Distinct ‑ дублирующие записи запроса не выводятся. Имя поля может быть составным, с включением имени таблицы, точки и самого имени таблицы. Если имя таблицы содержит пробелы, то оно заключается в апострофы. Вместо имени поля можно указать звездочку, если необходимо построить выборку из всех полей таблицы.
Псевдонимзадает наименование колонки (пробелы запрещены).
Для связывания таблиц используется фраза Join. Тип связи задается словами:Left/Right (в запрос входят все записи из таблицы, стоящей в запросе слева/справа),Inner(входят только записи с совпадающими ключами связи).
Пример задания базового запроса по базе строек.
Select Stroiki.Ns, Stroiki.Ds, Stroiki.Ss, Stroiki.Fs, Stroiki.M, Stroiki.Em, Podrjdhiki.Np, Zakazhiki.Nz FROM “stroiki.DB“ Stroiki
Inner Join “zakazhiki.db“ Zakazhiki ON (Stroiki.Kz = Zakazhiki.Kz)
Inner Join “podrjdhiki.DB“ Podrjdhiki ON (Stroiki.Kp = Podrjdhiki.Kp)
В результате выполнения запроса получается совокупность колонок, в заголовках которых могут находиться имена полей. Если нас не устраивают имена, формируемые по умолчанию, то можно назначить свои (псевдонимы), указав их после слова As. В выражении могут использоваться собственные специальные арифметические функции, действующие “по вертикали”: среднее значение в группе (Avg), минимальное (Min), максимальное (Max), сумма (Sum), число записей в группе (Count). Функция может иметь в качестве аргумента звездочку (Count (*)), что означает подсчет всех записей, попавших в выборку.
Where <условие отбора>- условие отбора записей в запрос. В условиях допускается использование логических операторов And, Or, Not и круглых скобок. В условиях, кроме любых функций Pascal, могут содержаться следующие операторы SQL:
<выражение> Like<шаблон> позволяет построить условие сравнения по шаблону, набор символов: “_” (неопределенный символ), “%” (любые символы, например: Where Ns Like ‘Школа%’), [n‑k]% (любые символы из интервала от n до k, например: Like ‘[A‑D]%’);
<выражение> Between<нижнее значение> And <верхнее значение> проверяет, находится ли выражение в указанном диапазоне (Where [Ss] Between 0 And 1000000);
<выражение> In(<выражение>,<выражение>,...) проверяет, находится ли выражение, стоящее слева от слова IN, среди перечисленных справа от него (Where Kz In (1,2,6)).
Group By <колонка>[,<колонка>...]‑ задаются колонки, по которым производится группирование выходных данных. Все записи таблицы, для которых значения колонок совпадают, отображаются в выборке единственной строкой. Группирование удобно для получения некоторых сводных характеристик (суммы, число записей, среднее) группы.
Пример. Вывести число сотрудников, максимальную, среднюю, минимальную и итоговую зарплату по подразделениям (поле Podr) по таблице SOTRUDNIKI.
Select podr, Count(*),Min (zarpl), Avg (zarpl), Max(zarpl), Sum (zarpl)
From Sotrudniki Group By podr Order By podr
Having <условие отбора группы>задает критерий отбора сформированных в процессе выборки групп.
Order By <колонка> [Asc/Desc] [,<колонка> [Asc/Desc]...]– опция, которая задает упорядочение по колонкам по возрастанию (Asc) или убыванию (Desc). Колонка задается номером или именем поля (Order By Kp, Kz).
Рассмотрим другие команды SQL.
Create Table <имя таблицы> (<поле> <тип поля> [Not Null], ...) ‑ создание таблицы (Create Table Kadr (Tab Integer, Fam Char (30) Not Null Primary Key (Tab))). Обязательное присутствие значения в поле задается параметром Not Null. Основные типы полей в SQL в Delphi: SmallInt (Short), Integer (Long Integer), Numeric(x,y), Float (x,y), Char (n), Data, Boolean, Time, Money, Autoinc. Для других СУБД типы полей могут быть другими.
Create View <имя представления> [(<имя столбца>,...)] As <оператор Select> ‑ создание представления с новыми именами столбцов (Create View NameStroek As Select Stroiki.Ns FROM Stroiki).
Alter Table <имя таблицы> {Add | Modify | Drop} <поле> [<тип поля>] [Not Null, ... ‑ изменение структуры таблицы: включение (Add), изменение (Modify) и удаление (Drop, тип поля не указывается) полей таблицы (Alter Table Stroiki Add Gorod Integer Drop Kp).
Update <таблица> Set <имя поля>={<новое значение>|Null}, ...
[Where <условие>] ‑ изменение значений полей (Update Kadr Set Oklad=1.5*Oklad Where Cex=”Цех N2”).
Insert Into<имя таблицы>(<список полей>) {Values (<список значений>)| Select...}‑ включение новой записи или группы записей из другой таблицы.
Примеры
Insert Into Zakazhiki (Kz,Nz) Values (3,’ЗИЛ’); // включение одной записи
Insert Into Podrjdhiki (Kp,Np) Select KPodr, NPodr From SpravPodr
Where DSozd >01.01.80; //включение группы записей из таблицы SpravPodr
Create [Unique] Index <имя индекса> On <таблица> (<поле> [{Asc|esc}],...) ‑ создание индекса (Create index indproba on stroiki (kz, kp)).
Drop Table/View <имя> ‑ удаление таблицы/представления (Drop Table Stroiki).
Drop Index [“<имя таблицы>”.]<имя индекса> ‑ удаление индекса.
Drop Index [“<имя таблицы>”.]Primary ‑ удаление главного индекса.
Delete From <имя таблицы> [Where<условие>]‑ удаление записей.
В запросе любого типа может быть вложенный запрос, который называется подзапросом.Подзапрос ‑ это запрос, результат которого используется в условии отбора в выражении Where другого внешнего запроса. Подзапрос заключается в круглые скобки.
Пример. Вывести крупные стройки со сметой выше средней по стройкам:Select * From Stroiki Where Ss > (Select Avg(Ss) From Stroiki).
Распределенная база данных. Определение, основные термины, типы моделей, достоинства и недостатки.
Существуют две технологии управления БД: распределенная БД и тиражирование (репликации).
Распределенная база размещается на различных узлах сети, но, с точки зрения пользователя, база воспринимается как единая локальная БД. Информация обо всех фрагментах находится в глобальном словаре данных. Для обеспечения корректности доступа к данным используется двухфазная фиксация транзакций: на первом этапе производится фиксация транзакций на каждом узле с возможностью отката назад, и при успешном завершении производится необратимая фиксация всех изменений.
Достоинства: пользователи работают с последней версией БД, экономится дисковая память. Недостатки: большие затраты коммуникационных ресурсов (они связываются на время выполнения транзакций) и жесткие требования к надежности и производительности каналов связи.
Тиражирование данных предполагает создание копии (репликаций) фрагментов базы в узлах сети. Эти копии обрабатываются как обычная локальная БД. Синхронизация копий и базы осуществляется специальной программой-репликатором, при этом передаются только изменения. Достоинства: высокая скорость обращения к данным, так как они всегда на узле пользователя; уменьшение объема передаваемой информации за счет передачи только изменений; повышение надежности. Недостаток: возможно расхождение копий БД на некотором интервале времени.
Монопольный и коллективный методы доступа к данным
Монопольный доступ используется обычно при массовых операциях с базой (реорганизация или восстановление базы и др.) и блокирует доступ ко всей БД другим пользователям.
Коллективный доступ дает возможность одновременной работы с БД многим пользователям. Для корректной работы при одновременной корректировке отдельных записей возможны следующие блокировки в порядке убывания ограничений на доступ к БД: полная блокировка (запрещение всех операций), блокировка от записи (только чтение таблицы), предохраняющая блокировка от записи (возможность завершить корректировку читаемого объекта другим пользователем при совместной корректировке одной таблицы), предохраняющая полная блокировка (обеспечивает максимальный уровень совместного использования БД). Обычно СУБД автоматически выбирает нужный вид блокировки, хотя пользователь может управлять блокировками посредством специальных команд.
Взаимные и односторонние блокировки (тупики, кличи) останавливают работу с базой до их устранения и являются нежелательными. Взаимные блокировки возникают, когда группа пользователей пытается захватить ресурсы, уже захваченные одним из пользователей этой группы. Односторонний тупик возникает при попытке получить монопольный доступ к занятому уже ресурсу. Обычно СУБД предотвращают тупики или дают сигнал пользователю о тупиках.
Принципы и этапы проектирования и создания баз данных.
Основные принципы проектирования баз данных.
Удовлетворение информационных потребностей различных пользователей за приемлемое время и в удобной форме.
Гибкая и нетрудоемкая модификация при изменении предметной области, программ и технических средств.
Достоверность данных, исключение дублирования.
Защита от несанкционированного доступа.
Восстановление данных и надежность функционирования.
Этапы и шаги проектирования и создания баз данных
1. Создание локальной концептуальной модели данных. Построение локальной концептуальной модели данных для каждого типа пользователя предметной области.
1.1. Определение типов сущностей.Выявление основных типов сущностей в представлениях пользователя и их документирование.
1.2. Определение типов связей.Определение типов связей между сущностями; документирование и составлениеER‑диаграмм.
1.3. Определение атрибутов и их связей.Связывание атрибутов с сущностями; выявление простых, составных, множественных, производных атрибутов и их документирование.
