Типы и структура СУБД: три богатыря
Реляционные системы управления данных применяются уже очень давно.
Пару слов о системах управления базами данных
База данных — это логически смоделированное хранилище различных типов данных. При этом каждая БД, если она не является бессхемной, следует модели, задающей определённую структуру обработки этих самых данных. Если говорить о системах управления (СУБД), то под данными терминами понимают приложения (либо библиотеки), управляющие базами данных разных типов, размеров и форм.
Реляционные СУБД
Эти СУБД реализуют реляционную модель обработки данных, определяя все хранимые данные как набор связанных атрибутов и записей в таблице. Каждый столбец (или атрибут) содержит определённый тип информации. Каждая запись в такой базе данных обладает уникальным ключом, передаётся в строку таблицы, плюс её атрибуты отображаются в столбцах данной таблицы.
Отношения и типы данных в СУБД
Отношения определяются в качестве математических множеств, содержащих наборы атрибутов, отображающих хранящуюся информацию. Любой элемент, формирующий запись, обязан удовлетворять конкретному типу данных (дате, целому числу и т. п.).
Разные СУБД применяют различные типы данных, которые не всегда бывают взаимозаменяемыми. Такого рода ограничения — обычное дело для реляционных баз данных, о которых мы сегодня говорим. По сути, они и формируют суть отношений.
Самые популярные СУБД (РСУБД)
Наиболее популярными реляционными СУБД являются: • SQLite — мощная встраиваемая СУБД; • MySQL — наиболее часто используемая и популярная СУБД; • PostgreSQL — гибкая и более продвинутая СУБД.
Поговорим про каждую из этих СУБД подробнее.
SQLite
Компактная встраиваемая система управления базами данных SQLite представляет собой библиотеку. Будучи файловой базой данных, она имеет прекрасный набор инструментария для более простой, если сравнивать с базами данных для серверов, обработки практически любых видов данных.
Если приложение использует эту СУБД, связь производится с помощью прямых и функциональных вызовов файлов, содержащих данные, а не какого-либо интерфейса.
Таким образом повышается как скорость, так и производительность операций.
Поддерживаемые типы данных:
— NULL (значение NULL); — INTEGER (целое число со знаком); — REAL (число с плавающей запятой); — TEXT (текстовая строка); — BLOB (тип данных, хранится в том же виде, в каком был получен).
Более подробную информацию об обрабатываемых типах данных смотрите по ссылке на официальную документацию.
Преимущества СУБД SQLite:
— хранится лишь в одном файле — это облегчает перемещение; — стандартизирована и использует SQL; — прекрасно подходит не только для разработки, но и для тестирования, обладает расширенным функционалом, оставаясь простой в работе.
Минусы:
— отсутствие пользовательского управления (в продвинутых базах данных можно управлять связями в таблицах по системе привилегий, в СУБД SQLite такая функция отсутствует); — невозможность дополнительной настройки (эту СУБД вы не сделаете производительнее, «поковырявшись» в настройках).
О целесообразности использования:
— встроенные приложения (любые портируемые приложения, не предназначенные для масштабирования: игры, мобильные и однопользовательские приложения); — системы доступа к дисковой памяти (программы, часто производящие прямые операции по чтению и записи на диск, при переводе на эту СУБД повышают свою производительность); — тестирование.
В некоторых случаях эту систему управления базами данных использовать не рекомендуется: — многопользовательские приложения (для них больше подходит полнофункциональные СУБД, к примеру, MySQL); — программы записи больших объёмов данных (одно из ограничений SQLite — операции записи, то есть допускается единовременное исполнение только одной операции записи).
MySQL
Популярнейшая база данных. Разобраться в ней довольно просто, плюс полно информации в сети. Да, СУБД MySQL не пытается реализовать SQL-стандарты в полной мере, зато предлагает широчайший функционал. При этом приложения взаимодействуют с базой данных посредством процесса-демона.
Поддерживаемые типы данных:
— TINYINT: очень маленькое целое; — MEDIUMINT: целое среднего размера; — SMALLINT: маленькое целое; — INT либо INTEGER: целое нормального размера; — FLOAT: число с плавающей запятой (одинарная точность); — BIGINT: большое целое; — DOUBLE, REAL, DOUBLE PRECISION: число с плавающей запятой (2-я точность); — DECIMAL, NUMERIC: число с плавающей запятой; — DATETIME: комбинация времени и даты; — DATE: дата; — TIME: время; — TIMESTAMP: отметка времени; — YEAR: год (формат YY либо YYYY); — CHAR: фиксированная строка, дополняется пробелами справа до максимальной длины; — SET: множества; — ENUM: перечисление; — VARCHAR: строка переменной длины и прочие.
Преимущества:
— легкая и простая установка, плюс много сторонних инструментов, облегчающих работу с базами данных; — расширенная функциональность (поддерживается большая часть SQL-функционала); — много функций, обеспечивающих безопасность данных; — мощность, масштабируемость (хорошо работает с большими объёмами данных); — скорость (пренебрежение некоторыми стандартами даёт возможность этой СУБД работать производительнее).
Недостатки:
— всё, что угодно, вы всё же не сделаете, так как определённые ограничения функциональности всё же присутствуют; — ряд операций реализован не так надёжно, как в других системах управления базами данных; — застой в разработке (хотя это и open-source-продукт, работа над СУБД и скорость её развития оставляют желать лучшего).
Рекомендации по применению:
— распределённые операции (если нужен больший функционал, чем имеется в SQLite, используйте MySQL); — приложения и веб-сайты (СУБД отличается гибкостью, возможна работа с большинством веб-ресурсов); — кастомные решения (если работаете над специфичным продуктом, эта СУБД вам подойдёт за счёт расширенного спектра настроек и режимов работы).
Но если требуется полная SQL-совместимость, эта система управления базами данных не подойдёт, т. к. возможны проблемы в процессе интеграции с другими СУБД. Также проблемы могут вызывать одновременные операции чтения-записи. Если неправильно выбрать движок, может недоставать ряда функций.
PostgreSQL
Наиболее продвинутая система управления базами данных, которая ориентируется на расширяемость и полное соответствие SQL-стандартам ANSI/ISO. Отличается от других систем объектно-ориентированным функционалом и полной поддержкой концепта ACID.
Система данных основана на мощной технологии Postgres, поэтому она хорошо справляется с обработкой нескольких заданий одновременно. Поддержка конкурентности реализована посредством MVCC, что тоже обеспечивает совместимость с ACID.
Данная СУБД не настолько популярна, как MySQL. Тем не менее существует множество сторонних библиотек и инструментов, облегчающих работу с этой системой управления базами данных.
Поддерживаемые типы данных:
— bigint: знаковое 8-байтное целое; — boolean: булевская величина; — bigserial: инкрементируемое (автоматически) 8-битное целое; — box: прямоугольник на плоскости; — bit [(n)]: битовая строка (имеет фиксированную длину); — bit varying [(n)]: тоже битовая строка, но уже переменной длины; — circle: круг на плоскости; — bytea: бинарные данные; — date: календарная дата; — character varying [(n)]: строка символов, имеющая фиксированную длину; — character [(n)]: аналогично, но переменной длины; — integer: знаковое 4-байтное целое; — cidr: сетевой адрес IPv6 либо IPv4; — inet: адрес хоста IPv6 либо IPv4; — macaddr: MAC-адрес; — polygon: многоугольник на плоскости; — line: бесконечная прямая на плоскости; — lseg: отрезок на плоскости; — xml: XML-данные; — path: геометрический путь; — money: денежная величина и прочие типы.
Достоинства:
— полная SQL-совместимость; — поддержка опытным профессиональным сообществом; — поддержка сторонними организациями; — расширяемость (систему управления базами данных можно программно расширить, используя хранимые процедуры); — объектная ориентированность (СУБД PostgreSQL является не только реляционной, но и объектно-ориентированной).
Минусы:
— в простых операциях чтения эта СУБД иногда уступает конкурентам; — система данных довольна сложна, поэтому не очень популярна; — сложно найти подходящего провайдера.
В каких случаях желательно использовать эту СУБД:
— когда в приоритете целостность и надёжность данных; — когда база данных должна выполнять сложные процедуры; — если в будущем планируется перенести базу данных на другой сервер, другое решение.
Есть и «противопоказания» применения PostgreSQL: — если всё, что вам нужно — быстрые операции чтения, однозначно не стоит брать эту СУБД; — когда повышенная надёжность, ACID и т. д. вам не требуются, то данная СУБД — это стрельба из пушки по воробьям.
Статья является свободным переводом отсюда, поэтому можете почитать её в оригинале.