Нормализация таблиц
Все построенные таблицы находятся в первой нормальной форме, так как каждый столбец таблицы неделим и в рамках одной таблицы нет столбцов с одинаковыми по смыслу значениями.
Таблица Сводная_ведомость через столбцы ID_Студент и ID_План связывает информацию о студенте с информацией о конкретной дисциплине и фиксирует оценку, полученную студентом. Оценка и дата сдачи экзамена (зачета) однозначно зависят от содержимого столбцов ID_Студент и ID_План, которые представляют собой составной первичный ключ. Таким образом, все таблицы имеют первичные ключи, которые однозначно определяют строки и не избыточны, и можно говорить о том, что таблицы находятся во второй нормальной форме.
Рассмотрим подробнее таблицу Учебный_план, которая содержит перечень дисциплин текущего учебного плана. Первичным ключом таблицы служит столбец ID План, который однозначно характеризует каждую дисциплину учебного плана с точностью до семестра, т. е. для дисциплин, протяженность изучения которых более одного семестра, в таблице будет отведено столько строк, сколько семестров длится изучение дисциплины. Тогда хранение наименований дисциплин в таблице Учебный план становится избыточным: например, если изучение английского языка длится шесть семестров, то наименование «Английский язык» будет повторено в шести записях и есть вероятность сделать шесть различных ошибок при вводе одного и того же наименования.
Чтобы избежать этого, проведем декомпозицию отношения Учебный план, выделив наименования дисциплин в отдельное отношение. В результате получим дополнительную таблицу Дисциплины со столбцами ID Дисциплина и Наименование, а столбец Наименование в таблице Учебный план заменим столбцом ID Дисциплина, сформировав тем самым вторичный ключ, связывающий новую таблицу с таблицей Учебный план.
Теперь можно говорить о базе данных Сессия, реляционная схема которой представлена следующими пятью таблицами:
Студенты — содержит по одной строке для каждого из студентов;
Учебный план — содержит по одной строке для отдельной дисциплины отдельного семестра;
Дисциплины — содержит по одной строке для наименования дисциплины;
Сводная ведомость — содержит по одной строке для каждого результата сдачи отдельным студентом отдельной дисциплины;
Кадровый состав — содержит по одной строке для каждого из преподавателей.
На рис. 2.25, а в графической форме изображены перечисленные таблицы, их столбцы, первичные и внешние ключи. Задание первичных и внешних ключей сопровождается построением дополнительных структур — индексов, обеспечивающих быстрый доступ к данным через значение ключа.
Рис. 2.25. Структура базы данных Сессия: а — общая графическая схема БД; б — характеристики таблиц БД
Таблица «Студенты»
Наименование столбца
|
Тип данных
|
Ограничения
|
ID_Студент
|
Целое число
|
Значение уникально
|
Фамилия
|
Строка символов размером 30
|
Значение не должно быть пустым
|
Имя
|
Строка символов размером 15
|
Значение не должно быть
пустым
|
Отчество
|
Строка символов размером 20
|
Значение не должно быть пустым
|
Номер_Группы
|
Целое число
|
Значение не должно быть
пустым
|
Адрес
|
Строка символов размером 30
|
|
Телефон
|
Строка символов размером 8
|
|
Таблица «Дисциплины»
Наименование столбца
|
Тип данных
|
Ограничения
|
ID_Дисциплина
|
Целое число
|
Значение уникально
|
Наименование
|
Строка символов размером 20
|
Значение уникально
|
Таблица «Кадровый состав»
Наименование столбца
|
Тип данных
|
Ограничения
|
ID_Преподаватель
|
Целое число
|
Значение уникально
|
Фамилия
|
Строка символов размером 30
|
Значение не должно быть пустым
|
Имя
|
Строка символов размером 15
|
Значение не должно быть пустым
|
Отчество
|
Строка символов размером 20
|
Значение не должно быть пустым
|
Должность
|
Строка символов размером 20
|
Значение не должно быть пустым
|
Кафедра
|
Строка символов размером 3
|
Значение не должно быть пустым
|
Адрес
|
Строка символов размером 30
|
|
Телефон
|
Строка символов размером 8
|
|
Таблица «Учебный план»
Наименование столбца
|
Тип данных
|
Ограничения
|
ID_План
|
Целое число
|
Значение уникально
|
ID_Дисциплина
|
Целое число
|
Значение не должно быть пустым
|
Семестр
|
Целое число
|
Значение не должно быть пустым и должно находиться в интервале от 1 до 10
|
Количествочасов
|
Целое число
|
|
ID_Преподаватель
|
Целое число
|
|
Таблица «Сводная ведомость»
Рис. 2.25. Структура базы данных Сессия (окончание)
Все таблицы базы данных Сессия находятся в третьей нормальной форме:
каждый столбец таблицы неделим, и в рамках одной таблицы нет столбцов с одинаковыми по смыслу значениями
(1НФ);
первичные ключи однозначно определяют запись и не избыточны, все поля каждой из таблиц зависят от ее первичного ключа (2НФ);
значение любого поля, не входящего в первичный ключ, не зависит от значения другого поля, тоже не входящего в
первичный ключ (ЗНФ).
Следующий этап проектирования — определение доменов (типов) данных, хранящихся в столбцах таблиц. Параллельно с заданием типа необходимо сформулировать ограничения целостности, связанные с типом, — перечень допустимых значений типа.
Исходя из особенностей данных и их функционального назначения, требуется задать способ представления и границы возможных изменений для каждого из столбцов таблиц. При этом необходимо ответить на вопрос, данные каких типов должны храниться в столбцах и какова их максимальная длина (например, если в столбце предполагается хранить процентные значения, то достаточно будет целого типа данных длиной 1 байт, так как диапазон возможных значений от 0 до 255; если для данных столбца выбирается тип «строка символов», то желательно указать максимальный размер данных столбца и т. п.).
Далее, в каждой таблице должны быть выделены столбцы, которые обязательно должны быть заполнены при создании отдельной строки таблицы. Задание такого ограничения целостности не позволит, например, ввести в таблицу Студенты строку, в которой не указан номер группы. Если подобные ограничения целостности не будут заданы, в таблице могут появиться строки, которые не будут учтены при выполнении функций по обработке данных: появление в таблице Студенты строки без номера группы приведет к ошибке при формировании ведомости.
Следующий важный момент — задание для столбцов значений по умолчанию. Значение по умолчанию впоследствии будет автоматически вводиться в указанный столбец для каждой строки таблицы. Например, в столбец Дата_сдачи таблицы Сводная_ведомость при заполнении очередной строки может автоматически заноситься текущая дата.
На рис. 2.25, б представлены таблицы базы данных Сессия с типами данных столбцов и предлагаемыми ограничениями целостности.
Все примеры использования языка SQL (Structured Query Language), рассматриваемые в гл. 4, будут построены на основе этой учебной базы данных Сессия.
Достарыңызбен бөлісу: |