ОСНОВЫ ПОСТРОЕНИЯ БАЗ ДАННЫХ Что такое база данных
Под базой данных (БД) понимается хранилище данных, принадлежащих некоторой области. Хранение этих данных должно быть некоторым образом организовано (структурировано), при этом хранящиеся данные должны быть непротиворечивы, минимально избыточны и целостны. Что под этим понимается, будет рассмотрено ниже. В самом общем смысле (техническом) база данных - это набор записей и файлов, организованных специальным образом. Например, можно хранить фамилии, имена, адреса и телефоны своих сотрудников или клиентов.
Один из типов баз данных - это документы, набранные с помощью текстовых редакторов и сгруппированные по темам. Другой тип - файлы электронных таблиц, объединяемые в группы по характеру их использования.
Модели баз данных
В своем развитии структуры (формы организации хранения данных), прошли несколько этапов:
иерархическая структура;
сетевая структура;
реляционная структура.
Основной идеей иерархических структур является наличие указателей, определяющих взаимоотношение уровней иерархии. Рассмотрим пример.
Пусть на некотором складе хранятся некоторые товары. Клиентами склада являются организации, приобретающие некоторые конкретные товары.
Пусть программистом разработана программа «Склад». Эта программа ведет учет товаров и клиентов. То есть мы имеем некоторый программный продукт, организованный по уровням иерархической структуры: Склад — Клиенты — Товары.
Достоинством иерархической структуры является понятность, простота реализации, и относительная легкость навигации.
К недостаткам следует отнести чрезмерную жесткость структуры: элементы нижнего уровня иерархии жестко привязаны к одному конкретному элементу верхнего уровня. Клиенты привязаны только к одному складу, количество клиентов ограничено, клиенты выбирают только ограниченное число конкретных товаров. Для изменения или расширения иерархической БД приходилось каждый раз переписывать код программы. Для придания БД большей гибкости были разработаны сетевые структуры, основным преимуществом которых явилась множественность, т.е. возможность принадлежности элементов нижнего уровня различным элементам верхнего уровня иерархии (Рис. 2). Конечно, у сетевых БД были недостатки. Как и иерархические БД, сетевые базы данных были очень жесткими. Структуру приходилось задавать наперёд. Изменение же структуры базы данных обычно означало перестройку всей базы данных.
Как иерархическая, так и сетевая базы данных были инструментами программистов. Чтобы получить ответ на вопрос типа «Какой товар наиболее часто заказывается», программисту приходилось писать программу для навигации по базе данных. Реализация пользовательских запросов часто затягивалась на недели и месяцы, и к моменту появления программы информация, которую она предоставляла, часто оказывалась бесполезной.
Реляционная модель данных
Недостатки иерархической и сетевой моделей привели к появлению новой, реляционной модели данных, созданной Е.Ф. Коддом в 1970 году и вызвавшей всеобщий интерес Е.Ф. Кодд, математик по образованию, впервые осознал, что математические дисциплины можно использовать для приведения в область управления базами данных строгих принципов и точности.
Первые реляционные программные продукты стали появляться в конце 1970-х - начале 1980-х годов. Сегодня таких продуктов более 200. Среди них такие как:
DB2 корпорации ШМ;
ORACLE корпорации Oracle;
INGRES компании Ingres Division of The ASK Group Inc.;
SYBASE компании Sybase Inc.;
Ш Database компании Borland и многие другие.
Реляционная модель была попыткой упростить структуру базы данных. В ней отсутствовали явные указатели на элементы уровней, а все данные были представлены в виде простых таблиц, разбитых на строки и столбцы.
Определение реляционной бд:
Реляционной называется база данных, в которой все данные, доступные пользователю, организованны в виде таблиц, а все операции над данными сводятся к операциям над этими таблицами.
Приведенное определение не оставляет места встроенным указателям, имеющимся в иерархических и сетевых БД. Несмотря на это. реляционная БД также способна реализовать иерархические отношения, (термин «реляционная!» происходит от английского слова relation - отношение), однако принцип этих отношений совершенно иной. Эти отношения представлены исключительно значениями данных, содержащихся в таблицах.
Таблицы и сущности
Таблицы
В реляционной базе данных информация организована в виде таблиц. Таблицы в реляционной базе данных разделены на строки {записи, кортежи) и столбцы {поля, атрибуты), на пересечении которых содержатся значения данных. У каждой таблицы имеется уникальное имя, описывающее ее содержимое. Строки ни имени, ни номера не имеют. Столбцы таблицы обязаны иметь имена (Рис. 3).
Факультет |
|
ЭФ |
Колесов |
ММ |
Лупанов |
вмк |
Моисеев |
фф |
|
фф |
|
Фамилия |
Имя |
Год |
Шаров |
Михаил |
1985 |
Корнетов |
Алексей |
1986 |
Алисов |
Николай |
1985 |
Никитин |
Михаил |
1984 |
Федоров |
Юрий |
1986 |
Рис. 3 Рис. 4
Каждая горизонтальная строка таблицы представляет отдельную физическую ха рактеристику.
Каждый вертикальный столбец таблицы представляет один элемент данных.
Все значения, содержащиеся в одном и том же столбце, являются данными одного типа (текст, число, дата,...)
На пересечении каждой строки с каждым столбцом таблицы содержится в точности одно значение данных.
Пересечение строки и столбца образует элементарное значение данных, которое является наименьшей единицей данных в РБД. Такие значения рассматриваются как атомарные, т.е. они неразложимы.
У каждого столбца в таблице есть свое имя, которое обычно служит заголовком столбца. Все столбцы в одной таблице должны иметь уникальные имена, однако разрешается присваивать одинаковые имена столбцам, расположенным в различных таблицах.
В стандарте ANSI/ISO не указывается максимально допустимое число столбцов в таблице, однако почти во всех коммерческих БД этот предел существует и обычно составляет примерно 255 столбцов.
В отличие от столбцов, строки таблицы не имеют определенного порядка. Это значит, что если последовательно выполнить два одинаковых запроса для отображения содержимого таблицы, нет гарантии, что оба раза строки будут перечислены в одном и том же порядке.
В таблице может содержаться любое количество строк. Допускается существование таблицы с нулевым количеством строк. Такая таблица называется пустой. Пустая таблица сохраняет структуру, определенную ее столбцами, просто в ней не содержатся данные. Стандарт ANSI/ISO не накладывает ограничений на количество строк в таблице, и во многих БД размер таблиц ограничен лишь свободным дисковым пространством компьютера. В других БД имеется максимальный предел, однако он весьма высок - около двух миллиардов строк, а иногда и больше.
51
С ущности
Любой объект, информацию о котором мы хотим разместить в РБД, называется сущностью. Каждая сущность характеризуется определенным набором данных. Для хранения этого набора и создается соответствующая таблица.
Таблица является хранилищем информационной сущности. Правила хранения информации рассматриваются ниже в разделе «Целостность реляционных данных».
Сущности подразделяют на три основных класса:
стержни - это независимые сущности. Например, таблица «Факультеты».
ассоциации - это связи между двумя и более сущностями. Например, таблицы «Факультеты» и «Студенты».
характеристики - это сущности, цель которых описание или уточнение других сущностей.
Ассоциации и характеристики не являются независимыми, поскольку они предполагают существование некоторой другой сущности или сущностей, которые будут ассоциироваться или характеризоваться.
Правила отношений сущностей рассматриваются в разделе «Реляционные отношения между таблицами (сущностями)».
Целостность реляционных данных
Ключи
Понятие первичного ключа
По математическому определению, множество не может содержать одинаковых элементов. Так как таблица является множеством (строк), то она не может содержать одинаковые строки. Поэтому каждая таблица реляционной БД должна содержать один или несколько столбцов, все значения или комбинации значений которых различны.
Определение первичного ключа
С толбец, или совокупность столбцов, называется первичным ключом (primary key, обозначается pk), если все его значения, или комбинации значений, различны. .
Например:
В таблице представленной на Рис. 5 первичным ключом является поле Код. В этом поле ни одно из значений не повторяется, т.е. содержит множество различных значений. В то же время поле Факультет не может быть первичным ключом, так как содержит повторяющиеся значения (ФФ, ФФ).
Код |
Факультет |
Декан |
1 |
ЭФ |
Колесов |
2 |
BMK |
Моисеев |
3 |
ФФ |
Смирнов |
4 |
ФФ |
Михайлов |
Рис.5
Требования, предъявляемые к первичному ключу
Первичный ключ должен отвечать двум требованиям: уникальность и минимальность.
Пусть имеется таблица со столбцами А\, А2 .... Ап.
Уникальность предполагает, что в произвольный момент времени никакие две различные строки таблицы не имеют одни и те же значения для А/, А/,..., А&.
52
Минимальность предполагает, что нп один из столбцов Аи А/, ..., А* не может быть изъят из ключа без нарушения условия уникальности.
Пример: На Рис. 6 первичными ключами для Таблицы 1 предполагаются поля Код и Номер. Тогда для левой таблицы Правила уникальности и минимальности нарушены, а для правой соблюдены.
Таблица 1 Таблица 1
Понятие внешнего ключа
Для объяснения понятия - внешний ключ, наша БД должна состоять как минимум из двух таблиц Рис. 7.
Определение внешнего ключа
Внешний ключ (foreign key, обозначается fk) - это столбец таблицы Т2, любое значение которого должно обязательно совпадать с одним из значений первичного ключа некоторой другой таблицы Т1.
Внешний ключ и соответствующий ему первичный ключ должны быть одного типа данных или иметь одну и ту же область определения, например множество целых чисел.
Т1
Рисунок 7
Все значения поля «Код Факультета» Т2 соответствуют значениям поля «Код Факультета» Т1.
Первичный и внешний ключи необходимы для установления отношений между таблицами их содержащими. Об этом смотри далее.
Реляционные отношения между таблицами
Между двумя и более таблицами могут существовать отношения подчиненности.
О тношение подчиненности определяет, что для каждой записи одной таблицы (Т1), существуют одна или несколько записей в другой таблице (Т2). При этом таблица Т1 именуется родительской, а таблица Т2 - дочерней.
Соответствие записей определяется первичным и внешним ключом
Существует три разновидности связи между таблицами БД:
один к одному;
один ко многим;
многие ко многим.
Отношение «один к одному»
Отношение «один к одному» это когда одной записи таблицы Т1 (родительской) соответствует одна запись таблицы Т2 (дочерней) (Рис. 8).
Рис. 8
Одной из причин, по которой создают связь один к одному является желание не создавать слишком громоздкую таблицу из-за второстепенной информации. Связь «один к одному» может быть жесткой и нежесткой.
Для жесткой связи одной записи в родительской таблице должна существовать одна запись в дочерней таблице. Для нежесткой связи, запись в дочерней таблице может отсутствовать. Данный вид отношений («один к одному») применяется редко.
Отношение «один ко многим»
Отношение «один ко многим» имеет место, когда одной записи таблицы Т1 (родительской) соответствует несколько записей таблицы Т2 (дочерней) (Рис. 9). На рис. 9 представлена БД, состоящая из двух таблиц «Факультеты» - родительская и «Студенты» - дочерняя.
В родительской таблице поле Код_Факультета является первичным ключом, а в дочерней одноименное поле является внешним ключом. Между этими таблицами должны быть соблюдены правила целостности (смотри ниже).
Как видим, одной записи родительской таблицы соответствует несколько записей дочерней таблицы (Рис. 9). Не исключено, что в дочерней таблице может и не быть записей соответствующих записи в родительской таблице (например: нет студентов на химическом факультете (ХФ)).
5-
Рис. 9
Различают две разновидности отношений «один ко многим»:
любой записи в родительской таблице соответствует одна или несколько записей в дочерней таблице,
записи в родительской таблице может несколько записей в дочерней таблице или не найтись ни одой.
Связь «один ко многим» является самой распространенной и позволяет создавать иерархическую структуру данных.
Отношение «многие ко многим»
Отношение «многие ко многим» имеет место, когда:
записи в родительской таблице могут соответствовать несколько записей в дочер ней таблице,
записи в дочерней таблице могут соответствовать несколько записей в родитель ской таблице.
Рис. 10
Как показано на Рис. 10 каждой учебной группе соответствует несколько преподавателей. Каждый из них может преподавать в разных группах и разные предметы. Считается, что связь «многие ко многим» может быть заменена на несколько связей «один ко многим». Не все БД поддерживают данный вид отношений.
55
Правила целостности
Два правила целостности для РБД .
Целостность по сущностям: не допускается, чтобы столбец первичного ключа ка кой-либо таблицы содержал неопределенное значение (null).
Целостность по ссылкам: если таблица Т2 содержит внешний ключ fk, соответст вующий первичному ключу рк другой таблицы Т1, то каждое значение fk в Т2 долж но:
либо быть равным значению рк для некоторой строки таблицы Т1,
либо быть неопределенным (иметь значение null).
На Рис. 11 и Рис. 12 представлены две одинаковых БД, для каждой из которых: 1. первичным ключом является поле Код_Факультета таблицы Факультеты, 2. вешним ключом, поле Код_Факультета таблицы Студенты.
На Рис. 11 правила целостности соблюдены.
На Рис. 12 правила целостности нарушены (рк имеет null и значения fk 7 и 13, не соответствуют ни одному значениям рк).
Правила целостности нарушены.
56