- •Базы данных
- •Глава 1. Введение в теорию баз данных
- •Основные понятия и определения
- •Основные пути и тенденции развития баз данных
- •1.2.1. Модели представления данных
- •Счет №_______ от _______
- •1.2.2. Разделение функций бд, субд и приложений
- •1.2.3. Локальные и серверные базы данных
- •Реляционная модель данных
- •1.3.1. Отношения и таблицы
- •1.3.2. Реляционные ключи
- •1.3.3. Ключи и индексы
- •1.4. Целостность баз данных
Базы данных
Глава 1. Введение в теорию баз данных
Основные понятия и определения
База данных (в широком смысле) – это компьютерная система упорядоченного хранения информации и обеспечения доступа к ней.
Структурно база данных (БД) представляет собой комплекс хранимой информации (собственно база данных в узком смысле) и средств доступа к ней (система управления базами данных и приложения) (рис. 1).
База данных (в узком смысле) – это упорядоченное множество информации об определенной сфере деятельности человека. В этом смысле БД не предполагает обязательное использование компьютера (например, алфавитный или предметный указатель в библиотеке).
Система управления базами данных (СУБД) – это компьютерная система, которая позволяет определять, создавать и поддерживать базы данных, а также организует контролируемый доступ к хранимой в них информации.
Приложения – это компьютерные программы, обеспечивающие доступ пользователя к информации, хранимой в БД, через СУБД.
Рис. 1. Структура современной БД
Важнейшей характеристикой любой БД является логическая структура хранимой информации, которая называется моделью представления данных или просто моделью данных (МД). В зависимости от используемой МД различают: иерархические, сетевые, реляционные, постреляционные, многомерные, объектные, … базы данных.
Основные пути и тенденции развития баз данных
1.2.1. Модели представления данных
Первые разработки в области БД относятся к концу 60-х годов прошлого столетия. Они основывались на иерархической и сетевой моделях данных.
В иерархической МД логическая структура хранимой информации может быть представлена упорядоченным графом (деревом, рис. 2) или набором деревьев.
Для такой структуры характерно наличие у каждого потомка только одного родителя.
Рис. 2. Граф-дерево
Рассмотрим вариант такой МД (рис. 3) для следующей постановки задачи.
Пример постановки задачи. Учет материальных средств на предприятии.
Предприятие состоит из нескольких подразделений (например, склад1, склад2, … или цех1, цех2, … и т.п.). В каждом подразделении есть одно или несколько материально ответственных (подотчетных) лиц, которые отвечают за получение, хранение и расходование материальных средств (детали, товары и т.п.). Далее для единообразия будем называть эти средства предметами.
Предметы поступают на предприятие от поставщиков. Каждый поставщик может поставлять различные предметы, и каждый предмет может поставляться различными поставщиками. Поступление предметов на предприятие централизовано, т.е., вначале все предметы поступают на центральный склад к соответствующим подотчетным лицам, а далее по мере необходимости передаются в подразделения другим подотчетным лицам.
Каждый предмет в любой момент пребывания на предприятии должен быть закреплен за конкретным подотчетным лицом.
По мере потребления (использования в производстве, продажи, и т.п.) предметы списываются. В этих целях используются различные направления списания. Например, счет 21 (основное производство), счет 22 (вспомогательное производство) и т.п.
Необходимо построить систему, которая хранила бы всю информацию о наличии и движении материальных средств на предприятии в натуральном и денежном выражении.
Рис. 3. Фрагмент иерархической модели данных
Достоинства ИМД:
Идеально подходит для представления информации с чисто иерархическими связями.
Возможность автоматического контроля целостности связей в рамках дерева (каждый потомок должен иметь только одного родителя).
Наличие развитых программных средств для работы со структурами типа дерева (указатели).
Недостатки ИМД:
Трудность и неочевидность представления информации со сложными логическими связями (как, например, отразить процесс движения предметов между п/о лицами?).
Отсутствие возможности автоматического контроля целостности связей между записями разных деревьев.
Выполнение даже относительно простых запросов требует отслеживания большого количества связей (например, для ответа на запрос: продукция каких поставщиков используется в различных подразделениях, потребуется полный просмотр двух деревьев).
Необходимость представления в МД сложных логических связей привела к появлению сетевой модели данных. Сетевая МД представляет собой обобщение иерархической модели на случай графа с произвольными связями (рис. 4).
Рис. 4. Граф с произвольными связями
Рис. 5. Фрагмент сетевой модели данных
Использование произвольных связей позволяет, например, объединить два дерева из предыдущей модели (рис. 5).
Достоинством сетевой МД является возможность отображения самых сложных связей в хранимой информации. Однако это достоинство еще более усугубляет недостатки иерархической МД: для выполнения запросов необходимо отслеживать еще большее количество произвольных связей; возможности автоматического контроля целостности связей отсутствуют (допустимы любые связи).
Революция в области БД произошла в 1970 г. и в своей основе имела статью американского математика Эдгара Кодда, посвященную реляционной модели данных. Эта модель оказалась настолько удачной и интуитивно понятной для пользователей, что и в настоящее время является основой большинства СУБД.
Рассмотрим реляционную модель данных на примере приведенной выше постановки задачи. Выделим основные объекты и процессы (типы сущности), фигурирующие в задаче, их свойства (атрибуты), а также обратим внимание на выполняемые ими функции.
Начнем с подотчетных лиц, поскольку именно они несут ответственность за правильный учет материальных средств на предприятии. Каковы их основные атрибуты? Во-первых, их необходимо каким-то образом различать. В этих целях будем использовать атрибут «наименование». Кроме того, необходимо знать в каком подразделении работает то или иное подотчетное лицо. Таким образом, в рассматриваемой постановке задачи у подотчетных лиц можно указать два собственных (т.е., не обусловленных связями с другими сущностями) атрибута: наименование и подразделение. Информацию о них сведем в таблицу «Подотчетные лица».
Таблица 1. Подотчетные лица
-
Наименование
Подразделение
Иванова А.А.
Центральный склад
Петрова Б.Б.
Центральный склад
Сидорова В.В.
Слад №1
. . .
Какие функции выполняют подотчетные лица? Они 1) принимают предметы от поставщиков или других лиц, 2) отвечают за их хранение и 3) списывают или передают предметы другим подотчетным лицам.
Следующий тип сущности, который можно выделить в нашей постановке задачи, это поставщики. Поскольку мы рассматриваем очень узкую постановку (например, речь не идет о формировании таких бухгалтерских документов, как накладная, счет-фактура и т.п.), то для них достаточно указать только один собственный атрибут – наименование. Функциональное назначение поставщиков – передача предметов подотчетным лицам, работающим на центральном складе.
Далее выделим еще один тип сущности – направления списания. Собственный атрибут у него также один – наименование. Выполняемая функция – принимать (условно говоря) предметы от подотчетных лиц.
Нетрудно заметить, что перечисленные объекты: подотчетные лица, поставщики и направления списания весьма схожи по набору атрибутов и функциям. Например, поставщиков можно рассматривать как подотчетные лица, которые не имеют отношения к подразделениям и могут только передавать предметы, а направления списания могут их только принимать. Поэтому представляется целесообразным объединить их всех в одну таблицу «Лица», а для различия выполняемых функций ввести еще один атрибут – тип лица.
Таблица 2. Лица
-
Наименование
Тип
Подразделение
Иванова А.А.
п/о лицо
Центральный склад
Петрова Б.Б.
п/о лицо
Центральный склад
Сидорова В.В.
п/о лицо
Слад №1
. . .
КЗТА
поставщик
-
Лесоторговая база
поставщик
-
АЗС №21
поставщик
-
. . .
Счет 21
напр. списания
-
Счет 22
напр. списания
-
. . .
Следующий тип сущности – предметы. Набор атрибутов для них достаточно очевиден. Это наименование, единица измерения и цена за единицу измерения. Кроме того, необходимо для реализации основной функции системы (отслеживание наличия и движения предметов) указать в каком количестве эти предметы имеются у подотчетных лиц. Всю эту информацию представим в виде таблицы «Предметы и их наличие».
Таблица 3. Предметы и их наличие
-
Наименование
Ед. изм.
Цена
П/о лицо
Кол-во
Винт М4
шт
0.04
Иванова А.А.
10000
Гайка М4
шт
0.05
Иванова А.А.
10000
Доска н/о 40
м3
4200.00
Иванова А.А.
5.7
. . .
Бензин Аи-92
л
18.00
Петрова Б.Б.
145
Бензин Аи-92
л
18.50
Петрова Б.Б.
500
. . .
Винт М4
шт
0.04
Сидорова В.В.
1000
Гайка М4
шт
0.05
Сидорова В.В.
800
Бензин Аи-92
л
18.00
Сидорова В.В.
25
. . .
Отметим, что цена предмета является суть важным атрибутом, поскольку предметы одного и того же наименования, поступившие в разные моменты времени, могут иметь различные цены и, соответственно, должны учитываться независимо.
В полученной таблице легко заметить повторяющиеся в нескольких строках значения. Например: Бензин Аи-92, л, 18.00. То есть таблица явно содержит избыточную информацию. А избыточность – это неоправданное увеличение объема таблицы и, как следствие, затрат времени и ресурсов на операции с нею. Нельзя ли эту избыточность сократить?
С этой целью разобьем указанную таблицу на две таблицы. В одну из них запишем информацию о предметах, а в другую – об их наличии у подотчетных лиц. Для связи между таблицами введем дополнительный атрибут: условный номер предмета.
Таблица 4. Предметы
-
Усл. № пр.
Наименование
Ед. изм.
Цена
1
Винт М4
шт
0.04
2
Гайка М4
шт
0.05
3
Доска н/о 40
м3
4200.00
4
Бензин Аи-92
л
18.00
5
Бензин Аи-92
л
18.50
. . .
Таблица 5. Наличие
-
П/о лицо
Предмет
Кол-во
Иванова А.А.
1
10000
Иванова А.А.
2
10000
Иванова А.А.
3
5.7
. . .
Петрова Б.Б.
4
145
Петрова Б.Б.
5
500
. . .
Сидорова В.В.
1
1000
Сидорова В.В.
2
800
Сидорова В.В.
4
25
. . .
Что еще необходимо учесть в рассматриваемой постановке задачи? Это движение предметов от поставщиков к п/о лицам, между п/о лицами и списание предметов. Формально эти процессы можно рассматривать как перемещение предметов между лицами, которые перечислены в таблице лиц. Сопоставим этим процессам тип сущности «Проводки» со следующим достаточно очевидным набором атрибутов:
передаваемый предмет;
кто передает предмет (в бухгалтерской терминологии: расход);
кто принимает предмет (приход);
когда (дата);
в каком количестве.
Соответствующая таблица будет иметь вид.
Таблица 6. Проводки
-
Предмет
Расход
Приход
Дата
Кол-во
1
КЗТА
Иванова А.А.
23.07.07
20000
2
КЗТА
Иванова А.А.
23.07.07
20000
4
АЗС №21
Петрова Б.Б.
15.07.07
700
1
Иванова А.А.
Сидорова В.В.
25.07.07
1000
2
Иванова А.А.
Сидорова В.В.
25.07.07
1000
4
Петрова Б.Б.
Сидорова В.В.
25.07.07
100
2
Сидорова В.В.
Счет 21
1.08.07
200
4
Сидорова В.В.
Счет 22
1.08.07
75
. . .
В последней таблице бросается в глаза повторение имен п/о лиц. Это тоже избыточность, которую можно уменьшить, введя для п/о лиц такую же условную нумерацию, как и для предметов. Если эту идею довести до логического завершения, то мы придем к следующей схеме таблиц (рис. 6). А информация в таблицах будет иметь вид:
Таблица 7. Типы лиц Таблица 8. Подразделения Таблица 9. Лица
Усл. № |
Наименов. |
|
Усл. № |
Наименов. |
|
Усл. № |
Наименов. |
Тип |
Подр. |
1 |
п/о лицо |
|
1 |
Ц. склад |
|
1 |
Иванова А.А. |
1 |
1 |
2 |
поставщик |
|
2 |
Склад №1 |
|
2 |
Петрова Б.Б. |
1 |
1 |
3 |
напр. спис. |
|
3 |
. . . |
|
3 |
Сидорова В.В. |
1 |
2 |
|
|
|
|
|
|
|
. . . |
|
|
Остальные таблицы заполните самостоятельно. |
21 |
КЗТА |
2 |
- |
|||||
22 |
Лесоторг. база |
2 |
- |
||||||
23 |
АЗС №21 |
2 |
- |
||||||
|
. . . |
|
|
||||||
Рис. 6. Схема реляционной БД
Пользуясь полученной схемой, попробуем ответить на приведенный ранее вопрос: продукция каких поставщиков используется в различных подразделениях. Для этого будем перемещаться по таблице подразделений и для каждой строки будем выбирать из таблицы лиц номера тех п/о лиц, которые работают в соответствующем подразделении. Для найденных лиц в таблице наличия выберем все имеющиеся у них предметы, а по номерам этих предметов в таблице проводок отберем все строки, относящиеся к их поставкам (поставки отличаются от всех прочих проводок тем свойством, что лицо, номер которого указан в поле «Расход», должно быть поставщиком). Из этих строк возьмем номера поставщиков, а их наименования легко определить из таблицы лиц. Таким образом, для ответа на приведенный запрос придется отследить небольшое количество связей между таблицами: Подразделения – Лица, Лица – Наличие, Проводки – Лица, Типы лиц – Лица. При этом основная работа сводится не к прослеживанию огромного количества связей, а к отбору (фильтрации) строк в таблицах по определенным, достаточно простым условиям.
Аналогично, используя простые и очевидные приемы, можно получать ответы на самые разнообразные запросы. Например, на какую сумму были поставлены предметы определенного наименования за определенный срок (в таблице предметов находим номера предметов нужного наименования, а по ним в таблице проводок выбираем все строки поставок, имеющие дату проводки в заданных пределах), у каких п/о лиц и в каких количествах имеются предметы определенного наименования (в таблице предметов находим номера предметов нужного наименования, по номерам предметов выбираем строки из таблицы наличия и группируем их по номерам лиц и далее по номерам находим имена лиц в таблице лиц) и т.д.
Итак, не пользуясь какими-то специальными знаниями, нам удалось прийти к очень удачной и понятной схеме базы данных для сформулированной выше постановки задачи. При этом мы выполнили (как выяснится позднее) ряд важных процедур таких, как нормализация таблиц, генерализация типов сущности, преобразование сложных связей и т.п., не имея пока что никакого представления о них.
Как видно из примеров, полученная схема позволяет достаточно просто и эффективно отвечать на самые различные запросы, которые могут возникать в процессе эксплуатации системы. Эта схема и представляет собой реляционную модель данных (РМД).
Обобщая приведенные рассуждения, можно сказать, что реляционная база данных (РБД) – это совокупность связанных таблиц.
Перечислим достоинства реляционной модели данных:
Простота и интуитивная понятность (мы пришли к РМД без использования каких-то специальных познаний; более того, многие разработчики БД (не СУБД) успешно работают, имея весьма приблизительные понятия о соответствующей математике).
Строгое математическое обоснование (РМД разработана математиком и в своей основе имеет реляционную алгебру и реляционное счисление).
Простота и относительно небольшое количество взаимосвязей, а, соответственно, простота формулирования и выполнения запросов.
Хорошие возможности для автоматического контроля целостности связей (так называемая ссылочная целостность).
Конечно, РМД имеет и недостатки, такие, например, как невозможность реализации связей типа многие-ко-многим, недопустимость многозначных атрибутов, ориентация на бинарные связи и т.п. (мы будем обсуждать их в свое время). Кроме того, следует понимать, что существуют частные виды информации, для которых удобнее будет использовать иные модели данных (например, для информации с чисто иерархическими связями логичнее будет использовать иерархическую модель данных). Однако недостатки РМД носят достаточно узкий и относительный характер и никоим образом не могут нивелировать ее достоинства.
Попытки преодолеть известные ограничения РМД приводят к появлению новых моделей данных. Например, вследствие недопустимости многозначных атрибутов, для хранения информации о счетах вида:
