Программные комплексы, предназначенные для ведения баз данных, называются системами управления базами данных (СУБД).
В прежние времена СУБД занимались сохранением таблиц и других вспомогательных
объектов в файлах, предоставляли пользовательский интерфейс для просмотра,
редактирования таблиц, изменения их структуры, создания и удаления таблиц.
Кроме того, они предлагали командный управляющий язык, на котором можно было
писать программы, а также давать в командной строке простые управляющие
команды. Такие СУБД были рассчитаны на однопользовательские и однозадачные
операционные системы вроде DOS
. В
качестве примеров можно назвать похожие между собой СУБД DBase, FoxPro,
Clipper, Paradox.
В современных СУБД применяется клиент-серверный подход. В рамках этого подхода СУБД представляет из себя сервер (поставщик услуг), который принимает сетевые соединения, исходящие от программ-клиентов (потребителей услуг). Клиентские программы могут работать как на том же компьютере, что и программа-сервер, так и на других компьютерах. Как только соединение установлено, клиент может отправлять запросы в сторону сервера, и получать от него ответы. Таким образом СУБД отвечает только за обработку запросов и хранение данных. Всю интерактивную часть (то есть связанную с взаимодействием с потребителем) берут на себя клиентские программы.
Клиент-серверная организация СУБД даёт значительные преимущества:
Централизация хранения данных. Все объекты баз данных хранятся на одном компьютере или на группе компьютеров, специально предназначенных для этого. Эти компьютеры обладают достаточным быстродействием и объёмом оперативной и постоянной памяти для выполнения возложенных на них задач. Они могут находиться в охраняемом помещении, их сетевая связь с внешним миром может быть особо защищена. Эти машины могут быть подключены к системам бесперебойного питания, так как для многих БД очень важна надёжность в хранении данных и бесперебойность работы.
Централизация обработки клиентских запросов. Поскольку запросы от клиентов могут поступать в непредсказуемые моменты времени и на их исполнение может потребоваться заранее неизвестное время, возможны конфликты запросов. СУБД должна ставить в очередь на обслуживание такие запросы или по возможности обслуживать их одновременно. При этом следует учитывать возможность конфликтных ситуаций, когда, например, несколько запросов пытаются обновить одно и то же подмножество записей в таблице. Или если в результате выполнения одного запроса обновляется подмножество записей, а другой запрос требует выборку информации из этого же (частично обновлённого) подмножества.
При централизованном хранении данных и централизованной обработке запросов клиенты получают наиболее свежую, актуальную информацию. Например, достаточно администратору магазина изменить цены в таблице товаров, как тут же кассовые терминалы обнаружат изменение цен при последующих запросах. Многие СУБД позволяют посылать клиентам оповещения, на которые те могут отреагировать нужным образом: например, при всё том же изменении цен клиенты могут быть оповещены и в ответ на оповещение перерисовать таблицу цен на экране терминала.
На клиентские программы возлагаются более скромные задачи: установление соединения с сервером баз данных, отправка запросов и получение результатов. Клиент предоставляет интерфейс для составления запросов и просмотра результатов его исполнения. Этот интерфейс может быть рассчитан как на человека (ввод данных или запросов с помощью клавиатуры или мышки, просмотр таблиц на экране), так и на «железо», специальное оборудование, которое в автоматическом режиме с помощью клиентской программы готовит запросы. Такой аппаратный интерфейс может использоваться, например, у операторов сотовых сетей.
Таким образом, клиент-серверная организация СУБД предлагает единый сервер и многообразие клиентских программ, отвечающих самым разным потребностям. Это соответствует принципу, которому подчинены очень многие современные операционные системы — «Unix way»: Вместо одной большой программы, претендующей на универсальность — множество мелких, каждая из которых очень хорошо решает свою узкоспециальную задачу.
Каждая клиентская программа совершает, как уже было упомянуто, множество однотипных действий, связанных с взаимодействием с сервером: установление соединения, отправка запросов, получение результатов и рассоединение. Эти рутинные действия могут быть довольно сложно устроены. Поэтому обычно эти действия программируют как отдельные процедуры и собирают их в клиентские библиотеки. Клиентские программы могут пользоваться библиотеками совместно, что позволяет резко упростить программирование клиентских программ и уменьшить их объём.
Назовём несколько современных СУБД: коммерческая система Oracle производства одноимённой фирмы, и свободно распространяемые MySQL и PostgreSQL.