Если мы попытаемся использовать файлы операционной системы для реализации
нашего проекта базы данных, то потребуется выделить по файлу для каждого из
соответствующих наборов данных, приведенных выше. При работе с этими файлами
придется в виде подпрограмм реализовать поиск нужных записей по ключевым полям,
вставку новых записей, изменение полей записей, вычеркивание записей. В этом в
принципе нет большой проблемы. Однако проблема может возникнуть, если мы
попытаемся в рамках файлов решить задачу поддержки целостности данных.
Например, мы может потребовать от системы, чтобы она следила за содержимым поля
НОМЕР_ПОСТ из набора данных ЗАГОЛОВКИ_ПРИЕМ_АКТ и не допускала вставки
в этот набор данных записей со значением поля НОМЕР_ПОСТ, отсутствующем в
наборе данных ПОСТАВЩИКИ. Это так называемая ссылочная целостность. (Такое
требование означает, что поставку могут осуществить только фирмы, сведения о
которых заранее занесены в набор данных ПОСТАВЩИКИ.) Другой пример: в файле
ОСТАТКИ данные должны изменяться всякий раз, как только выполняется ввод нового
акта приемки (и документа, соответствующего факту отправки товара в магазин - этот
документ по структуре аналогичен акту приемки и здесь особо не рассматривается,
хотя помнить о нем надо).
При решении такой задачи требуется поддержка знаний о том, как один набор
данных связан с другим набором, т. е. система обязана знать нечто большее, чем просто
данные в файлах. Эти добавочные знания называются метаданные. Для решения этой
и подобных проблем система должна будет содержать метаданные, в которые входят
знания о структуре и смысле каждого поля каждого набора данных (например, поле
НОМЕР_ПОСТ в файле ЗАГОЛОВКИ_ПРИЕМ_АКТ и поле НОМЕР_ПОСТ в файле
ПОСТАВЩИКИ означают одно и то же). Также система должна ―понимать‖, что в ряде
случаев изменение информации в одном файле должно автоматически вызывать
модификацию в другом файле, чтобы их общее содержимое было согласованным.
Например, если вводится новый приемный акт о приходе товара от поставщика, то
необходимо добавить записи в файл ОСТАТКИ (или модифицировать имеющиеся там
записи), чтобы отразить новые значения фактических остатков соответствующих
товаров на складе.
Понятие поддержки целостности данных или (согласованности данных) является
ключевым понятием баз данных. Фактически, если информационная система
поддерживает согласованное хранение информации в нескольких наборах данных,
можно говорить о том, что она содержит базу данных. Если же некоторая
вспомогательная система управления данными позволяет работать с несколькими
наборами данных, обеспечивая их согласованность, можно назвать ее системой
управления базами данных. Итак, второе требование к СУБД:
обеспечить согласованное хранение независимых наборов данных.
Но это еще не все, что обычно требуют от СУБД. Представим себе алгоритм, с
помощью которого можно получить общую сумму, на которую были куплены товары у
поставщика по имени X. Понятно, что подобные этому алгоритмы придется
программировать многократно. Каждый из подобных алгоритмов представляет собой
некоторую нетривиальную последовательность циклических действий над
содержимым записей нескольких наборов данных. Было бы гораздо проще, если бы
СУБД позволяла сформулировать запрос, освобождая программиста от необходимости
описывать алгоритм в явном виде на некотором языке программирования. Языки,
которые позволяют это сделать называются языками запросов к базам данных.
Например, на языке SQL, который является основным языком запросов в современных
системах баз данных, наш запрос можно было бы выразить в форме:
SELECT SUM(КОЛ_ВО * ЦЕНА_ЗАКУП)
FROM СОДЕРЖАНИЕ_ПРИЕМ_АКТ,