СУБД должна:
- Поддерживать логически согласованный набор файлов
- Восстанавливать информацию после сбоев
- Поддерживать параллельную работу нескольких пользователей
## Функции СУБД
1. Непосредственно управлением данными СУБД обращается и для служебных целей. СУБД использует как возможности файловой системы, так и напрямую
2. Управление буферами ОЗУ
3. Управление транзакциями  
	**Транзакция** - последовательность операций над БД, рассматриваемых СУБД как единое целое. Либо транзакция успешно выполняется и СУБД фиксирует изменения БД, произведенные этой транзакцией, либо ни одно из этих изменений не отражается на состоянии БД. На основе транзакций поддерживается логическая целостность БД.  
	Транзакция воспринимается единицей активности пользователя. Для многопользовательских систем, пока первый пользователь обращается к БД, другому пользователю доступа нет.
4.  Нормализация. Одно из требований к СУБД - надежность сохранения данных. Она должна быть в состоянии восстановить последнее согласованное состояние БД после любого аппаратного и программного сбоя. Для восстановления БД нужна дополнительная информация. Она хранится в журнале изменений БД.  
	**Журнал** - это особая часть БД, недоступная пользователям СУБД, поддерживаемая с особой тщательностью. Он содержит записи обо всех изменения в основной части БД. Известны 2 вида журналов: локальный и общесистемный. После мягкого сбоя используется локальный журнал, после жесткого - общесистемный.
5. Поддержка языков БД  
	**SQL** (Structured Query Language) - язык структурированных запросов  
	**SQL = DDL + DML + DQL**  
	**DDL** (Data Definition Language) - язык описания данных  
	**DML** (Data Manipulation Language) - язык манипуляции данными  
	**DQL** (Data Query Language) - язык запросов данных
## Типовая организация современной СУБД
1. **Внутренняя часть СУБД** (ядро СУБД, DBE - DataBase Engine) - отвечает за управление данными во внешней памяти, управление ОЗУ, управление транзакциями, журнализацию. Обладает собственным интерфейсом, который недоступен пользователям, но используется в программах
2. **Компилятор языка**. Проблема современных СУБД в том, что язык SQL - не процедурный. Поэтому, компилятор должен решать, как выполнить оператор, прежде чем произвести программу. Результат компиляции представлен в машинных кодах или во внутреннем машиннонезависимом коде
3. **Подсистема поддержки времени выполнения**. Направлена на выполнение машиннонезависимого кода. Является интерпретатором
4. **Утилиты** - процедуры, которые накладно выполнять с использованием языка БД: загрузка и выгрузка БД, сбор статистики, глобальная проверка целостности и т. д.