- •1. Введение в базы и банки данных
- •1.1. Понятие базы и банка данных
- •1.2. Компоненты банка данных
- •1.2.1. Информационная база
- •1.2.2. Лингвистические средства
- •1.2.3. Программные средства
- •1.2.4. Технические средства
- •1.4. Типология баз данных
- •1.2.5. Организационно-административные подсистемы
- •1.3. Пользователи баз данных
- •1.4.1. Типология баз данных с точки зрения информационных процессов
- •1.5. Семантика баз данных
- •1.6. Типология моделей
- •2. Базовые технологии и основные этапы развития машинной обработки данных
- •2.1. Введение в технологии машинной обработки данных и основные определения
- •2.2. Примерная схема организации файлового ввода-вывода
- •2.3. Эволюция концепций обработки данных
- •2.3.1. Простые (линейные) файлы данных (начало 60-х гг.)
- •2.3.2. Методы доступа к записям (конец 60-х гг.)
- •2.3.3. Первые системы управления базами данных (начало 70-х гг.)
- •2.3.4. Системы управления базами данных
- •2.4. Схема управления данными в субд
- •2.5. Данные и управление их обработкой
- •2.5.1. Типы, форматы, структуры данных
- •2.5.2. Описание и обработка файлов
- •2.6. Особенности и компромиссы реализаций баз данных
- •3. Модели и структуры данных
- •3.1. Многоуровневые модели предметной области
- •3.2. Идентификация объектов и записей
- •3.3. Поиск записей
- •3.4. Представление предметной области и модели данных
- •3.5. Структуры данных
- •3.5.1. Линейные структуры
- •3.5.2. Нелинейные структуры
- •3.5.3. Сетевые структуры
- •3.6. Реляционная модель данных
- •3.6.1. Основные понятия реляционной модели данных
- •3.6.2. Основы реляционной алгебры
- •4. Физические модели баз данных
- •4.1. Организация данных на машинных носителях
- •4.1.1. Типы записей
- •4.1.2. Организация файлов — способ размещения записей
- •4.1.3. Способы адресации и методы доступа к записям
- •4.1.4. Схемы организации данных на внешних носителях
- •4.2. Физическое представление иерархических структур
- •4.2.1. Физически последовательное размещение
- •4.2.2. Левосписковые структуры с переполнениями
- •4.2.3. Использование указателей на «подобные» и «порожденные»
- •4.3. Физическое представление сетевых структур
- •4.3.1. Физически последовательное размещение
- •4.3.2. Использование указателей
- •4.3.3. Физическое представление с разделением данных и связей
- •4.4. Архитектура файловой организации баз данных
- •4.4.1. Файл-ориентированная организация данных
- •4.4.2. Страничная организация данных
- •4.5. Модели распределения данных по физическим носителям
- •5. Модели и этапы проектирования баз данных
- •5.1. Модели многоуровневой архитектуры систем баз данных
- •5.2. Стадии проектирования и объекты моделирования
- •5.3. Системный анализ предметной области
- •5.4. Модели и технологии инфологического проектирования реляционных бд
- •5.4.1. Инфологическое проектирование и семантическая модель
- •5.4.2. Модель «Сущность — связь»
- •5.4.3. Er диаграмма
- •5.4.4. Нормальные формы er-диаграмм
- •5.5. Даталогические модели
- •5.5.1. Получение реляционной схемы из er диаграммы
- •5.6. Физические модели
- •6. Проектирование реляционной базы данных
- •6.1. Универсальное отношение
- •6.2. Функциональная и многозначная зависимости
- •6.3. Нормальные формы
- •6.4. Процедура нормализации
- •6.5. Пример проектирования реляционной бд
- •6.5.1. Построение еr-диаграммы
- •6.5.2. Построение реляционной схемы
- •6.5.3. Нормализация таблиц
- •7. Транзакции и целостность бд
- •7.1. Модели транзакций
- •7.2. Журнал транзакций
- •7.3. Параллельное выполнение транзакций
- •7.3.1. Пропавшие обновления
- •7.3.2. Чтение «грязных» данных
- •7.3.3. Чтение несогласованных данных
- •7.3.4. Строки-призраки
- •7.4. Сериализация транзакций
- •7.5. Захват и освобождение объекта
6.5.2. Построение реляционной схемы
Следующий этап проектирования – построение даталогической модели. В рассматриваемом случае задача этого этапа — преобразование ER-диаграммы в реляционную схему (см. п. 5.5.1).
Реляционный подход, в основе которого лежит принцип разделения данных и связей, обеспечивает, с одной стороны, независимость данных, а с другой – более простые способы хранения и обновления.
Первые шаги преобразования состоят в превращении каждой сущности в отношение (таблицу). Связь типа М:М, которую называют «сущность- связь», тоже превращается в отдельное отношение. Каждое свойство становится атрибутом – столбцом соответствующей таблицы.
После реализации этих шагов получаем реляционную схему, изображенную на рис.6.7, где представлены таблицы «Студенты», «Сводная ведомость», «Учебный план» и «Кадровый состав», отображающие соответственно сущности «Студент», «Сводная ведомость», «Дисциплина учебного плана» и «Преподаватель».
Рис. 6.7. Реляционная схема после первого этапа преобразования
Далее
необходимо преобразовать связи во
внешние ключи. Связь «многие ко многим»,
реализуемая отношением «Сводная
ведомость», должна содержать уникальные
идентификаторы сущностей — участников
связи. При этом, если для однозначной
идентификации студента достаточно
добавить в таблицу столбец ID_Cmyдент,
то
однозначная идентификация дисциплины
потребует добавления в таблицу столбцов
Наименование,
Семестр и
Форма
отчетности. Хранение
всей этой информации явно приведет к
избыточности
данных
и их потенциальной противоречивости
(например,
если при переносе дисциплины на другой
семестр обновить
только строку таблицы
«Учебный
план», то содержимое таблицы «Сводная
ведомость» станет неактуальным).
Для ликвидации избыточности и потенциальной противоречивости данных добавим в таблицу «Учебным план» столбец ID_План, содержимое которого будет однозначно идентифицировать каждую строку таблицы. Теперь этот новый столбец станет первичным ключом, и одноименный столбец должен быть добавлен в таблицу «Сводная ведомость».
Связь «Читает» предполагает добавление в таблицу «Учебный план» столбца ID_Преподаватель. Реляционная схема со связями представлена на рис. 6.8.
Рис. 6.8. Реляционная схема со связями
6.5.3. Нормализация таблиц
Все построенные таблицы находятся в первой нормальной форме, так как каждый столбец таблицы неделим и в рамках одной таблицы нет столбцов с одинаковыми по смыслу значениями.
Таблица «Сводная ведомость» через столбцы ID_Студент и ID_План связывает информацию о студенте с информацией о конкретной дисциплине и фиксирует оценку, полученную студентом. Оценка и дата сдачи экзамена (зачета) однозначно зависят от содержимого столбцов ID_Студент и ID_План, которые представляют собой составной первичный ключ. Таким образом, все таблицы имеют первичные ключи, которые однозначно определяют строки и неизбыточны, и можно говорим, о том, что таблицы находятся во второй нормальной форме.
Рассмотрим подробнее таблицу «Учебный_план», которая содержит перечень дисциплин текущего учебного плана. Первичным ключом таблицы служит столбец ID_План, который однозначно характеризует каждую дисциплину учебного плана с точностью до семестра, т. е. для дисциплин, протяженность изучения которых более одного семестра, в таблице будет отведено столько строк, сколько семестров длится изучение дисциплины. Тогда хранение наименований дисциплин в таблице «Учебный_план» становится избыточным: например, если изучение английского языка длится шесть семестров, то наименование «Английский язык» будет повторено в шести записях и есть вероятность сделать шесть различных ошибок при вводе одного и того же наименования.
Чтобы избежать этого, проведем декомпозицию отношения «Учебный план», выделив наименования дисциплин в отдельное отношение. В результате получим дополнительную таблицу «Дисциплины» со столбцами ID_Дисциплина и Наименование, а столбец Наименование в таблице «Учебный план» заменим столбцом ID__Дисциплина, сформировав тем самым вторичный ключ, связывающий новую таблицу с таблицей «Учебный_план».
Теперь можно говорить о базе данных «Сессия», реляционная схема которой представлена следующими пятью таблицами:
«Студенты» — содержит по одной строке для каждого из студентов;
«Учебный_план» — содержит по одной строке для отдельной дисциплины отдельного семестра;
«Дисциплины» — содержит по одной строке для наименования дисциплины;
«Сводная_ведомость» — содержит по одной строке дня каждого результата сдачи отдельным студентом отдельной дисциплины;
«Кадровый_состав» — содержит по одной строке для каждого из преподавателей.
На рис. 6.9 в графической форме изображены перечисленные таблицы, их столбцы, первичные и внешние ключи. Задание первичных и внешних ключей сопровождается построением дополнительных структур – индексов, обеспечивающих быстрый доступ к данным через значение ключа.
Рис. 6.9. Структура базы данных «Сессия»
Все таблицы базы данных «Сессия» находятся в третьей нормальной форме:
каждый столбец таблицы неделим, и в рамках одной таблицы нет столбцов с одинаковыми по смыслу значениями (1НФ);
первичные ключи однозначно определяют запись и неизбыточны, все поля каждой из таблиц зависят от ее первичного ключа (2НФ);
значение любого поля, не входящего в первичный ключ, не зависит от значения другого поля, тоже не входящего в первичный ключ (3НФ).
Следующий этап проектирования — определение доменов (типов) данных, хранящихся в столбцах таблиц. Параллельно с заданием типа необходимо сформулировать ограничения целостности, связанные с типом, – перечень допустимых значений типа.
Исходя из особенностей данных и их функционального назначения, требуется задать способ представления и границы возможных изменений для каждого из столбцов таблиц. При этом необходимо ответить на вопрос: данные каких типов должны храниться в столбцах и какова их максимальная длина (например, если в столбце предполагается хранить процентные значения, то достаточно будет целого типа данных длиной 1 байт, так как диапазон возможных значений — от 0 до 255; если для данных столбца выбирается тип «строка символов», то желательно указать максимальный размер данных столбца и т. п.).
Далее, в каждой таблице должны быть выделены столбцы, которые обязательно должны быть заполнены при создании отдельной строки таблицы. Задание такого ограничения целостности не позволит, например, ввести в таблицу «Студенты» строку, в которой не указан номер группы. Если подобные ограничения целостности не будут заданы, в таблице могут появиться строки, которые не будут учтены при выполнении функций по обработке данных: появление в таблице «Студенты» строки без номера группы приведет к ошибке при формировании ведомости.
Следующий важный момент – задание для столбцов значений по умолчанию. Значение по умолчанию впоследствии будет автоматически вводиться в указанный столбец для каждой строки таблицы. Например, в столбец Дата_сдачи таблицы «Сводная ведомость» при заполнении очередной строки может автоматически заносится текущая дата.
Ниже, на рис.6.10 представлены таблицы базы данных «Сессия» с типами данных столбцом и предлагаемыми ограничениями целостности.
Таблица «Студенты»
Наименование столбца |
Тип данных |
Ограничения |
ID_Студент |
Целое число |
Значение уникально |
Фамилия |
Строка символов размером 30 |
Значение не должно быть пустым |
Имя |
Строка символов размером 15 |
Значение не должно быть пустым |
Отчество |
Строка символов размером 20 |
Значение не должно быть пустым |
Номер группы |
Целое число |
Значение не должно быть пустым |
Адрес |
Строка символов размером 30 |
|
Телефон |
Строка символов размером 8 |
|
Таблица «Дисциплины»
Наименование столбца |
Тип данных |
Ограничения |
ID_Дисциплина |
Целое число |
Значение уникально |
Наименование |
Строка символов размером 20 |
Значение уникально |
Таблица «Кадровый_состав»
Наименование столбца |
Тип данных |
Ограничения |
ID_Преподаватель |
Целое число |
Значение уникально |
Фамилия |
Строка символов размером 30 |
Значение не должно быть пустым |
Имя |
Строка символов размером 15 |
Значение не должно быть пустым |
Отчее ню |
Строка символов размером 20 |
Значение не должно быть пустым |
Должность |
Строка символов размером 20 |
Значение не должно быть пустым |
Кафедра |
Строка символов размером 3 |
Значение не должно быть пустым |
Адрес |
Строка символов размером 30 |
|
Телефон |
Строка символов размером 8 |
|
Таблица
«Учебный план»
Наименование столбца |
Тип данных |
Ограничения |
ID_План |
Целое число |
Значение уникально |
ID_Дисциплина |
Целое число |
Значение не должно быть пустым |
Семестр |
Целое число |
Значение не должно быть пустым и должно находиться в интервале от 1 до 10 |
Количество часов |
Целое число |
|
ID_Преподаватель |
Целое число |
|
Таблица «Сводная ведомость»
Наименование столбца |
Тип данных |
Ограничения |
ID_Студент |
Целое число |
Значение не должно быть пустым |
ID_План |
Целое число |
Значение не должно быть пустым |
Оценка |
Целое число |
Значение не должно быть пустым и должно находиться в интервале от 0 до 5 |
Дата сдачи |
Дата-время |
Значение не должно быть пустым, по умолчанию – текущая дата |
Рис.6.10. Таблицы базы данных «Сессия»
