Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
62
Добавлен:
13.05.2015
Размер:
174.59 Кб
Скачать

1.3.6. Иерархическая модель

Иерархическая модель (дерево) представляет собой связанный ори­ен­­­ти­ро­ван­ный граф, у которого любой подчиненный узел (кроме кор­не­вого) имеет только один исходный узел (рис. 1.3.6.1).

Рис. 1.3.6.1. Пример иерархической структуры

Рассмотрим ряд терминов иерархической модели.

Высота, вес и момент дерева‑ число уровней, листьев и узлов в дереве.

Путь доступа ‑совокупность узлов и дуг, проходя которые можно прийти к искомому узлу.

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

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

Бинарное (двоичное) дерево‑ сбалансированное дерево с исходными уз­ла­ми степени два. Любое дерево можно преобразовать в бинарное дерево. Поиск дан­ных в бинарном дереве наиболее быстрый.

Один экземпляр дерева хранится в виде списка данных узлов, полу­ченного левосторонним обходом дерева (сверху вниз и справа налево).

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

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

Примеры СУБД:IMS, PC/Focus, Team‑Up, Data Edge, Ока, ИНЭС, МИРИС.

  1. Индексирование таблиц. Определение индекса и его назначение. Типы индексов.

Для таблиц создаются индексы (индексированные таблицы). Для не­ко­торых СУБД (FoxPro, dBase, Paradox) индексы могут храниться на диске в отдельных индексных файлах. Индексный файл содержит записи, каждая из которых содержит два значения: индекса и адреса записи таблицы со значением данного индекса. Адреса могут быть абсолютными (номер цилиндра, дорожки, сектора), отно­ситель­ными (номер записи в таблице) или сим­во­ли­ческими. Записи в ин­дек­сном файле отсортированы по воз­рас­та­нию или убыванию значения индекса.

Индексом может быть поле или группа полей (сос­тав­ной индекс) или свертка индекса в виде хеш‑кода (шифрованное значение ключа). Хеш‑код уменьшает размер индекса, но требуется дополнительное время на шифрование и де­ши­ф­ро­вание спе­циаль­ными программами (процедурами хеширования или ран­до­мизации). Индексные файлы могут быть мно­го­уров­невыми.

Обычно выделяют четыре типа индексов:

  1. Первичный (Primary) который является уникальным, служит для связи с другими таблицами. У таблицы может быть только один первич­ный индекс. Индексные поля не могут иметь пустые зна­че­ния.

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

  3. Уникальный (Unique) индекс хранит неповторяющиеся значения индекса, т.е. дублирующиеся значения игнорируются.

  4. Регулярный (Regular) индекс хранит значения индексов всех за­писей таблицы. Обычно такой индекс является внешним ключом.

Наличие индекса позволяет:

  1. обработать таблицу в нужной последовательности (логическая сортировка базы);

  2. осуществить прямой поиск нужной записи по ее индексу путем пе­ребора записей индексного файла и сравнения текущего индекса (свер­т­ки) с искомым значением индекса (свертки после ее получения по иско­мому индексу). После нахождения записи в индексном файле выби­ра­ет­ся адрес, и запись таблицы с данным адресом становится текущей. Если ис­поль­зуется свертка и имеются синонимы, то дополнительно просматрива­ет­ся цепочка синонимов и выбирается запись с искомым значением ин­декса. Так как размеры индексных файлов небольшие, они хранятся в оперативной памяти и их просмотр ведется в оперативной памяти очень быстро;

  3. связать родительскую таблицу с дочерней таблицей по индексу;

  4. организовать быстрый последовательный поиск группы записей таблицы по условию их отбора путем использования фильтрованного ин­дек­са или использовать индексы вместо полей записей таблицы в усло­виях отбора записей. Например, если имеется индекс по полю “Фами­лия” и нужно найти запись о сотруднике Иванове, то будет просматривать­ся не запись таблицы, а индексный файл, что значительно быстрее.

Процессом просмотра и доступа к базе данных управляет только один индексный файл (главный). Однако при измене­нии информации в таблице обновляются все индексные фай­лы таблицы. Глав­­ный индексный файл можно определить при помощи специальных ко­манд управления индексами (для FoxPro: Set Order, Set Index).

  1. Связывание таблиц. Назначение, типы связей и средства установки связей.

Таблицы обычно связываются попарно через ключи связи (п. 1.3.3). Ключи связи должны быть одинакового типа в родительской и дочерней таблицах. Связи бывают постоянные и временные. Постоянные связи уста­нав­ливаются до выполнения прикладной программы при создании логи­че­с­кой модели данных (обычно визуальными средствами). Этими связями можно пользоваться в прикладной программе. Временные связи уста­нав­ли­ваются при выполнении прикладной программы (в FoxPro командой Set Relation) и удаляются после ее выполнения. Использование связанных таблиц существенно упрощает пользователю обработку таблиц (так, пере­ме­щаясь по родительской таблице, происходит автоматическое перемещение по ее дочерним таблицам по условию равенства ключей связи), автома­ти­чес­ки обеспечивая контроль целостности (п. 1.2.4). Дочерняя таблица должна иметь индекс по ключу связи.

  1. Основные команды языка запросов 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. Удовлетворение информационных потребностей различных поль­зо­вателей за приемлемое время и в удобной форме.

  2. Гибкая и нетрудоемкая модификация при изменении предметной области, прог­рамм и технических средств.

  3. Достоверность данных, исключение дублирования.

  4. Защита от несанкционированного доступа.

  5. Восстановление данных и надежность функционирования.

Этапы и шаги проектирования и создания баз данных

1. Создание локальной концептуальной модели данных. Постро­е­ние локальной концептуальной модели данных для каждого типа поль­зо­ва­те­ля предметной области.

1.1. Определение типов сущностей.Выявление основных типов сущностей в представлениях пользователя и их документирование.

1.2. Определение типов связей.Определение типов связей между сущ­ностями; документирование и составлениеER‑диаграмм.

1.3. Определение атрибутов и их связей.Связывание атрибутов с сущностями; выявление простых, составных, множественных, производ­ных атрибутов и их документирование.

Соседние файлы в папке ШПОРЫ - ГОТОВО