
- •Рецензент
- •Лекция 1. Базы данных и системы управления базами данных
- •Понятие базы данных
- •Понятие системы управления базами данных
- •Обобщенная архитектура субд
- •Трехуровневая архитектура ansi-sparc
- •Достоинства и недостатки субд
- •Архитектура многопользовательских субд
- •Технология «клиент/сервер»
- •Лекция 3. Администрирование баз данных. Системный каталог Понятие независимости данных
- •Общая классификация пользователей бд
- •Администратор базы данных
- •Разделение функций администрирования
- •Лекция 4. Проектирование бд
- •Некоторые термины и определения, используемые при работе с базами данных
- •Принципы проектирования информационных систем
- •Жизненный цикл информационной системы
- •Этапы проектирования баз данных
- •Лекция 5. Семантическое моделирование
- •Лекция 6. Логическое проектирование субд Выбор субд
- •Метод ранжировки
- •Метод непосредственных оценок
- •Метод последовательных предпочтений
- •Оценка результатов экспертного анализа
- •Лекция 7. Даталогические модели данных
- •Иерархическая модель
- •Сетевая модель
- •Реляционная модель
- •Достоинства и недостатки даталогических моделей
- •Лекция 8. Нормализация бд. Часть1 Понятие функциональной зависимости[2]
- •Аксиомы вывода функциональных зависимостей
- •Первая нормальная форма
- •Вторая нормальная форма
- •Третья нормальная форма
- •Нормализация через декомпозицию
- •Лекция 9. Нормализация бд. Часть 2 Недостатки нормализации посредством декомпозиции
- •Нормальная форма Бойса–Кодда (нфбк)
- •Многозначные зависимости
- •Аксиомы вывода многозначных зависимостей
- •Четвертая нормальная форма
- •Зависимости соединения
- •Пятая нормальная форма
- •Обобщение этапов нормализации
- •Лекция 10. Физическая организация данных в субд Списковые структурых [2]
- •Последовательное распределение памяти
- •Связанное распределение памяти
- •Модель внешней памяти
- •Лекция 11. Методы поиска и индексирования данных Последовательный поиск [2]
- •Бинарный поиск
- •Индекс - «бинарное дерево»
- •Неплотный индекс
- •Плотный индекс
- •Инвертированный файл
- •Лекция 12. Реляционная модель данных Понятие отношениях
- •Формы представления отношений
- •Теоретические языки запросов
- •Определение реляционной полноты
- •Лекция 13. Распределенные базы данных и субд
- •Основные определения, классификация распределенных систем
- •Преимущества и недостатки распределенных субд
- •Функции распределенных субд
- •Архитектура распределенных субд
- •Лекция 15. Общее введение в sql, типы данных и средства определения доменов Часть 1. Введение
- •Краткая история языка sq [12]
- •Структура языка sql
- •Типы данных sql
- •Tочные числовые типы
- •Истинно целые типы
- •Точные типы, допускающие наличие дробной части
- •Приближенные числовые типы
- •Типы символьных строк
- •Типы битовых строк
- •Лекция 16. Общее введение в sql, типы данных и средства определения доменов Часть 2. Типы даты и времени
- •Тип даты
- •Типы времени
- •Типы временной метки
- •Типы времени и временной метки с временной зоной
- •Типы временных интервалов
- •Булевский тип
- •Типы коллекций
- •Типы массивов
- •Типы мультимножеств
- •Анонимные строчные типы
- •Типы, определяемые пользователем
- •Ссылочные типы
- •Средства определения, изменения определения и отмены определения доменов
- •Определение домена
- •Примеры определений доменов
- •Изменение определения домена
- •Примеры изменения определения домена
- •Отмена определения домена
- •Неявные и явные преобразования типа или домена
- •Неявные преобразования типов в sql
- •Явные преобразования типов или доменов и оператор cast
- •Заключение
- •Тезаурус
- •12. Кузнецов с. Д. Базы данных. Вводный курс. Http://citforum.Ru/database/advanced_intro/
Связанное распределение памяти
Связанное представление линейного списка называется связанным списком. При связанном распределении памяти для построения структуры необходимо Задать отношения следования и предшествования элементов с помощью указателей. Указателями служат адреса, хранимые в записях данных. В отличие от последовательного распределения памяти, при котором с помощью адресной функции вычисляется адрес следующего элемента, при связанном распределении памяти значение адресной функции можно получить только путем просмотра хранящихся указателей. Такой метод распределения памяти позволяет расширить либо сократить структуру без перемещения самих данных в памяти, однако при этом требуется больше памяти для хранения структуры по сравнению с последовательным распределением [22, 24].
Связанное распределение – более сложный, но и более гибкий способ хранения линейного списка. Каждый узел содержит указатель на следующий узел списка, т.е. адрес следующего узла списка (рис. 10.3). При связанном распределении не требуется, чтобы список хранился в последовательных элементах памяти. Наличие адресов связи в данном способе хранения позволяет размещать узлы списка произвольно в любом свободном участке памяти. При этом линейная структура списка обеспечивается указателями.
Структура линейного списка, представленная с помощью связанного распределения, называется также цепной структурой или цепью.
Для достижения большей гибкости при работе с линейными списками в каждый узел X[i] вводятся два указателя. Один из указателей реализует связь рассматриваемого узла с узлом X[i-1], а другой – с узлом XIi+1] (рис. 10.4).
Рис. 10.3. Примеры связанных линейных списков:
а) – однонаправленный список; б) - тот же список после удаления узла 4 и включения узлов 2а и 5
Связанные списки – удобная форма представления динамически изменяющихся линейных структур. Любое произвольное изменение порядка записей, сокращение или расширение вектора данных в какой-либо записи не требуют перемещения записей в памяти компьютера. Для выполнения этих операций достаточно лишь изменить значения полей связи.
Однако доступ к конкретному узлу может оказаться намного длительнее, чем при последовательном распределении памяти. Чтобы получить доступ к данным, хранящимся в узле Х[i], необходимо сделать i итераций, используя указатели и поля связи в узлах X[k], где k = 1, 2, ..., i, т.е. последовательно просмотреть все предшествующие узлы списка. Этот недостаток можно устранить различными способами.
Рис. 10.4. Пример двунаправленного линейного списка
Одним из способов является организация связанного линейного списка с пропусками (рис. 10.5, а). Для этого линейный список делится на группы узлов, связанные между собой обратными указателями. Вначале осуществляется доступ по обратным указателям к группе, в которой находится требуемый узел, а затем по прямым указателям перебираются узлы группы, пока не будет найден требуемый узел. Вход в список при таком способе организации осуществляется с конца.
Другой способ (рис. 10.5, б) заключается в построении специального дополнительного линейного списка – индекса, например, с последовательным распределением памяти. Элементы индекса – значения первых узлов каждой группы и указатели на них.
Оптимальный
размер группы (количество узлов в группе)
при равновероятном нахождении узла в
любой из групп
где n
– количество элементов списка.
Число групп
Рис. 10.5. Примеры реализации способов ускорения доступа к узлам линейного связанного списка:
а) – организация линейного связанного списка с пропусками; б) – организация линейного связанного списка с индексом
При равновероятном нахождении узла в любой из групп при доступе к узлу необходимо просмотреть в среднем l/2 групп, а в каждой группе nг/2 узлов. Следовательно, общее количество просмотров
(10.4)
Для связанных линейных одно- или двунаправленных списков в ряде случаев целесообразно создать специальный узел – голову списка – и хранить его в специальной фиксированной ячейке памяти по адресу β. В этот узел помещается указатель на первый узел списка. В голове списка можно хранить различную служебную информацию, необходимую при обработке списка (идентификатор списка, количество узлов в списке и т.п.).
Важной разновидностью представления в памяти линейного списка является циклический список. Циклически связанный линейный список обладает той особенностью, что связь от последнего узла идет к первому узлу списка (рис. 10.6). Циклический список позволяет получить доступ к любому узлу списка, отправляясь от любого заданного узла. Циклические списки называются также кольцевыми структурами или кольцами.
Рис. 10.6. Пример однонаправленного циклического списка
Наряду с однонаправленными используются двунаправленные циклические списки. В ряде случаев удобно использовать циклический список с указателями на голову списка из каждого узла, за исключением последнего узла, поскольку используется прямой указатель на голову списка [24].
Базируясь на использовании способов представления связанных линейных списков, можно реализовать в памяти компьютера сложные нелинейные структуры, например древовидные или сетевые. Такие представления структур называются многосвязанными списками. Для построения многосвязанного списка требуется иметь в узлах достаточное количество указателей. Наличие большого числа указателей в многосвязанной структуре в ряде случаев повышает эффективность обработки.
Таким образом, основой построения связанных списковых структур являются указатели.
При практической реализации в компьютере можно использовать три типа указателей (адресов записей):
машинный (действительный);
относительный;
символический (идентификатор).
Первый тип указателей – действительный адрес – используется тогда, когда необходимо получить наибольшую скорость обработки данных, организованных в связанные списковые структуры. Этот тип указателей имеет серьезный недостаток – жесткую привязку записей к конкретному месту расположения в памяти. Если возникнет необходимость переместить список на новое место в памяти, то потребуется выполнить работу изменению указателей во всех записях.
Второй тип указателей – относительный адрес – позволяет размещать записи в любом месте памяти и на различных внешних устройствах без изменения значений указателей, при этом относительное расположение в памяти узлов списка между собой должно оставаться постоянным. При перемещении списка указатели в записях не изменяются, а изменяется базовый адрес при вычислении действительных машинных адресов. Относительные адреса в качестве указателей применяются при страничной организации памяти. Скорость доступа к узлам при использовании относительных адресов несколько замедляется по сравнению со случаем машинных адресов, однако появляется возможность размещать список в любом свободном месте памяти подходящего размера.
Третий тип указателей – символический адрес (идентификатор) – позволяет перемещать отдельные записи относительно друг друга, включать или удалять записи в список без изменения указателей во всех остальных записях списка. Однако при работе с символическими указателями скорость доступа меньше, чем при работе с машинными или относительными адресами. Идентификаторы в качестве указателей удобно использовать для интенсивно изменяющихся файлов. Преобразование идентификатора в машинный адрес при выполнении операций обращения к узлам списка выполняется с помощью специального алгоритма в соответствии с выбранным методом адресации.
С точки зрения организации структуры данных различают два типа указателей [24]:
встроенные указатели;
справочник указателей.
Если указатели образуют часть записи, то они называются встроенными. Если указатели хранятся отдельно от записей, то они образуют справочник.
Указатели имеют следующие возможные пути использования [24]:
1) определяют направление доступа (можно двигаться только в тех направлениях, которые заданы указателями);
2) соединяют вместе связанные по смыслу данные;
3) отображают ориентированные ребра в древовидных или сетевых структурах;
4) связывают память на дисках и организуют цепочки дисковых страниц и т.п.
Применение многосвязанных списков – это основной механизм, позволяющий разработчикам СУБД реализовать сложные нелинейные структуры. Однако следует избегать слишком большого количества указателей, поскольку на них тратится память и время на переходы по указателям. Кроме того, при большом количестве указателей основная структура, представляемая в памяти компьютера, теряет четкость, и могут возникнуть связи, которые в отображаемой структуре отсутствуют.