Студопедия

КАТЕГОРИИ:


Архитектура-(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; Просмотров: 388; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.01 сек.