КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Постреляционная модель
Связывание таблиц Индексирование таблиц Для таблиц могут создаваться индексы. Индекс логически представляет собой таблицу из двух колонок: в первой находятся значения индекса в порядке убывания или возрастания, а во второй – адреса записи таблицы со значением данного индекса. Адреса могут быть абсолютными (номер цилиндра, дорожки, сектора), относительными (номер записи в таблице) или символическими.
Индексом может быть поле или группа полей (составной индекс). Физическая организация индексов, обычно скрыта от программиста и для различных СУБД она различная. Например, для Access индексы хранятся вместе с данными в одном файле, а для Visual FoxPro – в отдельном файле для одного и группы индексов. Пример. Создадим для таблицы сотрудников (таблица 1.3.8.4.1) индекса по табельному номеру (таблица 1.3.8.4.2). Таблица 1.3.8.4.1 Таблица «Сотрудники»
Таблица 1.3.8.4.2 Таблица индексов по табельному номеру
При изменении информации в таблице автоматически обновляются все индексы таблицы. Наличие индекса позволяет: 1) Обработать таблицу в нужной последовательности (логическая сортировка таблицы). Для этого назначается главный индекс, который задает порядок (по возрастанию или убыванию значения индекса) чтения записей таблицы (в примере по возрастанию значения табельного номера). Главный индекс можно определить при помощи специальных команд управления индексами (например, Set Index to для FoxPro, или фразой фраза Set Order To оператора Select языка SQL). 2) Осуществить прямой поиск нужной записи по ее индексу (например, табельного номера равного 30) методом двоичного поиска записи индексной таблицы и сравнения текущего индекса с искомым значением индекса (30). Если текущий индекс не совпадает с исходным, то СУБД выводит сообщение об отсутствии записи с исходным значение индекса (обычно, это может случиться после аварийного завершения работы с базой данных, например, при отключении электропитания или “зависания” операционной системы). После нахождения записи в индексном файле выбирается адрес (номер записи 3), и запись таблицы с данным адресом (под номером 3) становится текущей. Так как размеры индексных файлов небольшие, то они хранятся в оперативной памяти и двоичный поиск в оперативной памяти производится максимально быстро. В нашем примере, нужно найти запись о сотруднике с табельным номером 30, то будет не последовательный поиск нужной записи, а двоичный в индексной таблице, что значительно быстрее (число шагов поиска равно двоичному логарифму из числа всех записей в индексной таблице). Если учесть, что СУБД все знает о своих файлах, размерах записей и таблиц, о типе и емкости дисководов, то она рассчитывает точный физический адрес записи по ее номеру в таблице (имя диска, номер цилиндра, дорожки и сектора) и головка чтения за одно перемещение находит и читает нужную запись. Таким образом, время поиска и чтения практически не зависит от числа записей в таблице и примерно равно времени механического перемещения головки чтения и записи дисковода и одного оборота диска. Если индексная таблица содержит много записей, то могут использоваться иерархическая, а не линейная организация хранения индексов, что ускоряет поиск записей (это внутренняя задача самой СУБД, программист освобожден от этого). 3) Организовать быстрый последовательный поиск группы записей таблицы по условию их отбора путем использования фильтрованного индекса или использовать индексы вместо полей записей таблицы в условиях отбора записей. Например, вывести сотрудников подразделения с кодом 2. 4) Для полей связей таблиц должны быть созданы индексы. Обычно выделяют следующие типы индексов. Первичный (Primary) который является уникальным, служит для связи с другими таблицами (индекс для первичного ключа). У таблицы может быть только один первичный индекс. Индексные поля не могут иметь пустые значения. Вторичный, или кандидат (Candidat), аналогичный первичному, но не может быть им, так как место первичного индекса уже занято (индекс для вторичного ключа). Уникальный (Unique) индекс хранит неповторяющиеся значения индекса, т.е. дублирующиеся значения игнорируются. Регулярный (Regular) индекс хранит значения индексов всех записей таблицы. Обычно такой индекс является внешним ключом. Фильтрованный индекс – индекс формируется только для тех записей, которые удовлетворяют некоторому заданному условию. Кластерный индекс – при создании индекса происходит физическая сортировка индексируемой таблицы, что ускоряет работу с этой таблицей. Обычно, кластерный индекс создается для редко изменяемых таблиц, например, справочников единиц измерения, подразделений, должностей.
Таблицы обычно связываются попарно через ключи связи (п. 1.3.1). Ключи связи должны быть одинакового типа в родительской и дочерней таблицах. Связи бывают постоянные и временные. Постоянные связи устанавливаются до выполнения прикладной программы при создании логической модели данных (обычно визуальными средствами). Этими связями можно пользоваться в прикладной программе. Временные связи устанавливаются при выполнении прикладной программы (в FoxPro командой Set Relation, в языке SQL – в фразах JOIN и WHERE оператора SELECT) и удаляются после ее выполнения. Использование связанных таблиц существенно упрощает пользователю обработку таблиц (так, перемещаясь по родительской таблице, происходит автоматическое перемещение по ее дочерним таблицам по условию равенства ключей связи), автоматически обеспечивая контроль целостности (п. 1.3.5). Дочерняя таблица должна иметь индекс по ключу связи. Во многом нормализация отношений нарушает естественные иерархические связи между объектами, которые достаточно распространены в нашем мире. Возможность сохранять их на концептуальном (но не па физическом) уровне позволяет пользователям более естественно отражать семантику предметной области. В настоящий момент уже существует теоретическое обоснование работы с ненормализованными отношениями и практические реализации подобных систем. Постреляционная модель ‑ это реляционная модель, допускающая многозначные поля (атрибуты), т.е. само поле может быть таблицей. Пример. Имеется реляционная база из двух таблиц: НАКЛАДНЫЕ (номер накладной, дата поставки, код поставщика). ТОВАРЫ (номер накладной, код товара, количество, единица измерения). Ее можно перевести в постреляционную базу из одной таблицы: НАКЛАДНЫЕ‑ТОВАРЫ (номер накладной, дата поставки, код поставщика, товары в накладной). Поле “Товары в накладной” является таблицей “ТОВАРЫ”. Достоинство: уменьшение числа таблиц в базе, что повышает наглядность представления данных, не требует операции соединения двух таблиц при выполнении программы, повышает эффективность хранения и обработки данных. Недостатки: проблема обеспечения целостности и непротиворечивости данных (используются не нормализованные таблицы). Примеры СУБД: uniVers, Bubba, Dasdb.
Дата добавления: 2014-12-10; Просмотров: 409; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |