Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
БД.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
387.07 Кб
Скачать

Базы данных

Глава 1. Введение в теорию баз данных

    1. Основные понятия и определения

База данных (в широком смысле) – это компьютерная система упорядоченного хранения информации и обеспечения доступа к ней.

Структурно база данных (БД) представляет собой комплекс хранимой информации (собственно база данных в узком смысле) и средств доступа к ней (система управления базами данных и приложения) (рис. 1).

База данных (в узком смысле) – это упорядоченное множество информации об определенной сфере деятельности человека. В этом смысле БД не предполагает обязательное использование компьютера (например, алфавитный или предметный указатель в библиотеке).

Система управления базами данных (СУБД) – это компьютерная система, которая позволяет определять, создавать и поддерживать базы данных, а также организует контролируемый доступ к хранимой в них информации.

Приложения – это компьютерные программы, обеспечивающие доступ пользователя к информации, хранимой в БД, через СУБД.

Рис. 1. Структура современной БД

Важнейшей характеристикой любой БД является логическая структура хранимой информации, которая называется моделью представления данных или просто моделью данных (МД). В зависимости от используемой МД различают: иерархические, сетевые, реляционные, постреляционные, многомерные, объектные, … базы данных.

    1. Основные пути и тенденции развития баз данных

1.2.1. Модели представления данных

Первые разработки в области БД относятся к концу 60-х годов прошлого столетия. Они основывались на иерархической и сетевой моделях данных.

В иерархической МД логическая структура хранимой информации может быть представлена упорядоченным графом (деревом, рис. 2) или набором деревьев.

Для такой структуры характерно наличие у каждого потомка только одного родителя.

Рис. 2. Граф-дерево

Рассмотрим вариант такой МД (рис. 3) для следующей постановки задачи.

Пример постановки задачи. Учет материальных средств на предприятии.

Предприятие состоит из нескольких подразделений (например, склад1, склад2, … или цех1, цех2, … и т.п.). В каждом подразделении есть одно или несколько материально ответственных (подотчетных) лиц, которые отвечают за получение, хранение и расходование материальных средств (детали, товары и т.п.). Далее для единообразия будем называть эти средства предметами.

Предметы поступают на предприятие от поставщиков. Каждый поставщик может поставлять различные предметы, и каждый предмет может поставляться различными поставщиками. Поступление предметов на предприятие централизовано, т.е., вначале все предметы поступают на центральный склад к соответствующим подотчетным лицам, а далее по мере необходимости передаются в подразделения другим подотчетным лицам.

Каждый предмет в любой момент пребывания на предприятии должен быть закреплен за конкретным подотчетным лицом.

По мере потребления (использования в производстве, продажи, и т.п.) предметы списываются. В этих целях используются различные направления списания. Например, счет 21 (основное производство), счет 22 (вспомогательное производство) и т.п.

Необходимо построить систему, которая хранила бы всю информацию о наличии и движении материальных средств на предприятии в натуральном и денежном выражении.

Рис. 3. Фрагмент иерархической модели данных

Достоинства ИМД:

  1. Идеально подходит для представления информации с чисто иерархическими связями.

  2. Возможность автоматического контроля целостности связей в рамках дерева (каждый потомок должен иметь только одного родителя).

  3. Наличие развитых программных средств для работы со структурами типа дерева (указатели).

Недостатки ИМД:

  1. Трудность и неочевидность представления информации со сложными логическими связями (как, например, отразить процесс движения предметов между п/о лицами?).

  2. Отсутствие возможности автоматического контроля целостности связей между записями разных деревьев.

  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

. . .

Что еще необходимо учесть в рассматриваемой постановке задачи? Это движение предметов от поставщиков к п/о лицам, между п/о лицами и списание предметов. Формально эти процессы можно рассматривать как перемещение предметов между лицами, которые перечислены в таблице лиц. Сопоставим этим процессам тип сущности «Проводки» со следующим достаточно очевидным набором атрибутов:

    1. передаваемый предмет;

    2. кто передает предмет (в бухгалтерской терминологии: расход);

    3. кто принимает предмет (приход);

    4. когда (дата);

    5. в каком количестве.

Соответствующая таблица будет иметь вид.

Таблица 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. Схема реляционной БД

Пользуясь полученной схемой, попробуем ответить на приведенный ранее вопрос: продукция каких поставщиков используется в различных подразделениях. Для этого будем перемещаться по таблице подразделений и для каждой строки будем выбирать из таблицы лиц номера тех п/о лиц, которые работают в соответствующем подразделении. Для найденных лиц в таблице наличия выберем все имеющиеся у них предметы, а по номерам этих предметов в таблице проводок отберем все строки, относящиеся к их поставкам (поставки отличаются от всех прочих проводок тем свойством, что лицо, номер которого указан в поле «Расход», должно быть поставщиком). Из этих строк возьмем номера поставщиков, а их наименования легко определить из таблицы лиц. Таким образом, для ответа на приведенный запрос придется отследить небольшое количество связей между таблицами: Подразделения – Лица, Лица – Наличие, Проводки – Лица, Типы лиц – Лица. При этом основная работа сводится не к прослеживанию огромного количества связей, а к отбору (фильтрации) строк в таблицах по определенным, достаточно простым условиям.

Аналогично, используя простые и очевидные приемы, можно получать ответы на самые разнообразные запросы. Например, на какую сумму были поставлены предметы определенного наименования за определенный срок (в таблице предметов находим номера предметов нужного наименования, а по ним в таблице проводок выбираем все строки поставок, имеющие дату проводки в заданных пределах), у каких п/о лиц и в каких количествах имеются предметы определенного наименования (в таблице предметов находим номера предметов нужного наименования, по номерам предметов выбираем строки из таблицы наличия и группируем их по номерам лиц и далее по номерам находим имена лиц в таблице лиц) и т.д.

Итак, не пользуясь какими-то специальными знаниями, нам удалось прийти к очень удачной и понятной схеме базы данных для сформулированной выше постановки задачи. При этом мы выполнили (как выяснится позднее) ряд важных процедур таких, как нормализация таблиц, генерализация типов сущности, преобразование сложных связей и т.п., не имея пока что никакого представления о них.

Как видно из примеров, полученная схема позволяет достаточно просто и эффективно отвечать на самые различные запросы, которые могут возникать в процессе эксплуатации системы. Эта схема и представляет собой реляционную модель данных (РМД).

Обобщая приведенные рассуждения, можно сказать, что реляционная база данных (РБД) – это совокупность связанных таблиц.

Перечислим достоинства реляционной модели данных:

  1. Простота и интуитивная понятность (мы пришли к РМД без использования каких-то специальных познаний; более того, многие разработчики БД (не СУБД) успешно работают, имея весьма приблизительные понятия о соответствующей математике).

  2. Строгое математическое обоснование (РМД разработана математиком и в своей основе имеет реляционную алгебру и реляционное счисление).

  3. Простота и относительно небольшое количество взаимосвязей, а, соответственно, простота формулирования и выполнения запросов.

  4. Хорошие возможности для автоматического контроля целостности связей (так называемая ссылочная целостность).

Конечно, РМД имеет и недостатки, такие, например, как невозможность реализации связей типа многие-ко-многим, недопустимость многозначных атрибутов, ориентация на бинарные связи и т.п. (мы будем обсуждать их в свое время). Кроме того, следует понимать, что существуют частные виды информации, для которых удобнее будет использовать иные модели данных (например, для информации с чисто иерархическими связями логичнее будет использовать иерархическую модель данных). Однако недостатки РМД носят достаточно узкий и относительный характер и никоим образом не могут нивелировать ее достоинства.

Попытки преодолеть известные ограничения РМД приводят к появлению новых моделей данных. Например, вследствие недопустимости многозначных атрибутов, для хранения информации о счетах вида: