База данных (БД) - это хранилище структурированных данных, непротиворечивых, минимально избыточных и целостных.
Реляционная БД является связанной между собой совокупностью таблиц-сущностей базы данных (ТБД), каждая из которых представлена совокупностью строк и столбцов, где первые соответствуют экземпляру объекта, явлению или конкретному событию, а вторые - атрибутам (признакам, параметрам, характеристикам) объекта, явления, события.
На практике в ходе разработки БД таблицы-сущности называют таблицами, столбцы-атрибуты – полями, строки-экземпляры – записями ТБД.
Важным достоинством реляционных баз данных является возможность хранения логически сгруппированных данных в разных таблицах и связывания последних с объединением их в единую базу. Подобная организация данных позволяет уменьшать избыточность хранящихся данных, упрощать их ввод, а также организацию запросов, отчетов.
Понятие первичного ключа
В каждой таблице БД, как правило, существует первичный ключ, под которым понимается поле или набор полей, которые, в свою очередь, уникально (однозначно) идентифицируют запись. Первичный ключ должен по минимуму достаточный, не должен содержать полей, удаление которых отразилось бы на его уникальности.
К примеру, приведем таблицу «Преподаватель».
Первичным ключом в приведенной таблице может быть лишь поле «Таб. №», значения остальных полей могут дублироваться внутри этой таблицы.
Реляционные отношения между таблицами БД
Между 2 или более таблицами базы возможны отношения подчиненности, которые будут определять, что каждой записи главной таблицы (родительской) соответствуют одна или несколько записей подчиненной таблицы (дочерней).
Отношения между таблицами БД бывают 3 видов:
- один-ко-многим;
- один-к-одному;
- многие-ко-многим.
Отношение один-ко-многим используется, когда 1 записи из родительской таблицы соответствует несколько записей из дочерней таблицы. Подобная связь самая распространенная для реляционных БД.
Отношение один-ко-многим изображают в виде соединения таблиц линией, оканчивающейся на стороне дочерней таблицы кружком или другим символом. Поля первичного ключа всегда расположены вверху и могут отделяться от других полей сплошной линией (рис. 1).
Отношение один-к-одному используется, когда 1 записи родительской таблицы соответствует 1 запись дочерней (рис.2).
Это отношение применяют, чтобы таблица БД не увеличивалась в объеме от второстепенной информации.
Отношение многие-ко-многим используют, когда:
- записи родительской таблицы соответствует более 1 записи дочерней;
- записи дочерней таблицы соответствует более 1 записи родительской.
К примеру, каждый студент изучает несколько дисциплин. При этом каждая дисциплина может изучаться рядом студентов (рис. 3).
Многими СУБД (например, Access) не поддерживаются связи многие-ко-многим на уровне индексов и ссылочной целостности. Считается, что такую связь можно заменить на 1 или более связей один-ко-многим (рис.4).
Например,
Ссылочная целостность и каскадные воздействия
Рассмотрим довольно часто встречающуюся в базе данных связь один-ко-многим. Как видим из рисунка 5, дочерняя таблица и родительская связаны между собой общим полем Шифр группы. Это поле назовем полем связи.
Вероятны 2 вида изменений, которые могут привести к потере связей между записями в родительской и дочерней таблицах:
- если изменить значение поля связи в записи родительской таблицы и при этом не изменять значения полей связи в соответствующих записях дочерней таблицы;
- если изменить значение поля связи в 1 из записей дочерней таблицы и при этом не изменять значения полей связи в родительской и дочерней таблицах.
В обоих случаях наблюдаем нарушение целостности БД в результате использования в ней недостоверной информации. Как следствие, необходимо блокировать действия, нарушающие целостность связей между таблицами, так называемую ссылочную целостность.
Во избежание потери ссылочной целостности используют механизм каскадных изменений, состоящий в обеспечении нижеприведенных требований:
- необходим запрет изменения полей связи в записях дочерних таблиц без синхронного изменения полей связи в родительских таблицах;
- когда изменяют поле связи в записи родительской таблицы, необходимо синхронно изменять значения полей связи в соответствующих записях дочерней таблицы;
- если удаляют запись в родительской таблице, нужно удалять соответствующие записи в дочерней таблице.
Необходимость разрешения каскадного изменения обычно используется в СУБД в ходе определения связей между таблицами. Так создается ссылочная целостность.
Понятие внешнего ключа
Чтобы обеспечить ссылочную целостность в дочерней таблице создают внешний ключ, содержащий поля связи дочерней таблицы. Для обеспечения связи типа один-ко-многим внешний ключ по составу полей необходимо, чтобы совпадал с первичным ключом родительской таблицы.
Индексы и методы доступа
Индексы являются механизмами быстрого доступа к данным таблиц БД. Их сущность заключается в хранении значений индексных полей и указателя на запись в таблице. Чтобы выполнить запрос к таблице БД при последовательном методе доступа, просматриваются все записи таблицы, от начала до конца.
При индексно-последовательном методе доступа, чтобы выполнить запрос к таблице, указатель в индексе устанавливается на первой строке, удовлетворяющей условию запроса (или части), и считывается соответствующая запись из таблицы по указателю, хранящемуся в индексе.
При определении первичных и внешних ключей таблиц БД создаются индексы по полям, которые объявлены в составе первичных или внешних ключей.
Нормализация таблиц при проектировании базы данных
В ходе проектирования структуры новой БД определяются сущности (объекты, явления) предметной области. В результате анализа предметной области создается эскиз БД. Вначале изображаются сущности и связи между ними. Каждой сущности в БД обычно соответствует таблица. Далее в эскизе второго порядка - для каждой таблицы БД приводят список атрибутов - полей записи. На данном этапе проектирования должно выполняться требование, в соответствии с которым реляционная БД должна быть нормализована. Процесс нормализации устраняет избыточность данных и приводит к третьей нормальной форме (3НФ).
-
Первая нормальная форма (1НФ) требует, чтобы все поля таблиц БД были неделимыми и не содержали бы повторяемых групп.
Неделимость поля заключается в том, что значение поля не делится на более мелкие значения.
Повторяемые поля содержат одинаковые смысловые значения.
-
Для второй нормальной формы (2НФ) характерно требование зависимости всех полей таблицы от первичного ключа, то есть первичный ключ должен однозначно определять запись и не быть избыточным. Поля, зависящие только от части первичного ключа, нужно выделять в составе отдельных таблиц.
- Для третьей нормальной формы (3НФ) характерно то, что значение любого поля таблицы, которое не входит в первичный ключ, не зависит от значения другого поля, также не входящего в первичный ключ.