- Как спроектировать базу данных, чтобы в будущем не пришлось её переписывать — базовые советы
- Как спроектировать базу данных, чтобы в будущем не пришлось её переписывать — базовые советы
- Используйте хотя бы третью нормальную форму
- Первая нормальная форма
- Вторая нормальная форма
- Наконец, третья нормальная форма
- Используйте проверочные ограничения
- Не храните ФИО в одном поле, также как и полный адрес
- Установите для себя правила именования таблиц и полей
- Изучаем управление базами данных: — 7 лучших бесплатных систем с открытым исходным кодом
- CUBRID
- Firebird
- Программное обеспечение для работы с базой данных MariaDB
- MongoDB
- MySQL
- PostgreSQL
- SQLite
- Есть идеи?
Как спроектировать базу данных, чтобы в будущем не пришлось её переписывать — базовые советы
Как спроектировать базу данных, чтобы в будущем не пришлось её переписывать — базовые советы
Прим. перев. Предполагается, что вы уже имеете начальные знания по SQL. Если вы плохо понимаете, что такое таблицы, строки, индексы, первичные ключи и ссылочная целостность, то лучше сначала изучить их, например по этим видео:
А если вы знакомы с SQL и вас не остановили предыдущие термины, на всякий случай напомним, что:
- атомарность предполагает, что значение нельзя разделить на несколько атрибутов;
- под кортежем понимается запись (строка) в таблице базы данных;
- атрибут — это колонка таблицы;
- неключевой атрибут — это атрибут, не входящий в состав никакого потенциального ключа.
Есть минимум два требования, которые должны быть соблюдены при проектировании структуры БД:
- Сохранить всю информацию после разделения её на таблицы.
- Минимизировать избыточность того, как эта информация хранится.
Примечание Второй пункт важен не только из-за того, что избыточность влияет на размер БД. Чаще всего при обновлении данных нужно обработать много строк. В таком случае вы рискуете просто забыть обновить некоторые из них, что приведёт к коллизиям внутри БД.
Ниже перечислены некоторые рекомендации, которые помогут добиться эффективной структуры:
- используйте хотя бы третью нормальную форму;
- создавайте ограничения для входных данных;
- не храните ФИО в одном поле, также как и полный адрес;
- установите для себя правила именования таблиц и полей.
Используйте хотя бы третью нормальную форму
Нормальные формы — это требования, которые должны соблюдаться при правильной проектировке базы данных.
19–21 апреля, Онлайн, Беcплатно
Нормальных форм существует целых 6 штук, однако обычно соблюдают всего лишь 3 и для начала этого более чем достаточно.
Первая нормальная форма
Для примера будем использовать отношение сотрудники_отделы_проекты. В нём есть информация о номере сотрудника, его фамилии, номере отдела, в котором он работает, номере телефона отдела и так далее.
Это отношение, как и любое другое, автоматически находится в первой нормальной форме:
- в отношении нет одинаковых кортежей;
- кортежи не упорядочены;
- атрибуты не упорядочены и различаются по наименованию;
- все значения атрибутов атомарны.
Вторая нормальная форма
В нашем случае у таблицы выше имеется сложный (составной) ключ <Н_СОТР, Н_ПРО>. От части ключа Н_СОТР зависят неключевые атрибуты ФАМ , Н_ОТД , ТЕЛ . От части ключа Н_ПРО зависит неключевой атрибут ПРОЕКТ . А вот атрибут Н_ЗАДАН зависит от всего составного ключа, так как сотрудник может выполнять одно задание в одном проекте.
Поэтому для приведения отношения ко второй нормальной форме из отношения сотрудники_отделы_проекты нужно выделить два отношения сотрудники_отделы и проекты, а исходное отношение оставим отношением задания.
Наконец, третья нормальная форма
Отношение находится в третьей нормальной форме, когда отношение находится во второй нормальной форме и все неключевые атрибуты взаимно независимы.
Для того, чтобы устранить зависимость неключевых атрибутов, нужно произвести декомпозицию отношения ещё на несколько отношений. При этом те неключевые атрибуты, которые являются зависимыми, выносятся в отдельное отношение.
Отношение сотрудники_отделы не находится в третьей нормальной форме, так как имеется зависимость неключевых атрибутов, таких как зависимость номера телефона от номера отдела. Поэтому декомпозируем отношение сотрудники_отделы на два отношения — сотрудники и отделы:
Используйте проверочные ограничения
База данных — это не просто набор таблиц. В неё встроено много инструментов, которые помогут с сохранностью и качеством данных.
В первую очередь БД поможет с ограничением значений, которые принимают поля.
Внешние ключи регламентируют отношения между таблицами. Благодаря им сильно упрощается контроль за структурой базы, уменьшается и упрощается код приложения. Правильно настроенные внешние ключи — это гарант того, что увеличится целостность данных за счёт уменьшения избыточности. Поэтому обязательно применяйте ограничение внешнего ключа при определении связей между таблицами.
Выражения ON DELETE и ON UPDATE внешних ключей используются для указания действий, которые будут выполняться при удалении строк родительской таблицы ( ON DELETE ) или изменении родительского ключа ( ON UPDATE ). Не пренебрегайте ими.
Стоит убедиться, что обязательность заполнения ( NOT NULL ) проверяется для полей, которые строго не должны оставаться пустыми.
Используйте CHECK , чтобы убедиться, что значения входят в диапазон (например чтобы цена не была отрицательной).
Не храните ФИО в одном поле, также как и полный адрес
Представим ситуацию, когда вам понадобится узнать, в каком городе продукт более популярен. В таком случае, если полный адрес хранится в виде цельной строки, сделать это будет очень тяжело, ведь вам нужно будет каким-то образом выделить из этой строки город. Учитывая все возможные форматы и варианты адресов, эта задача становится практически невыполнимой. Похожая ситуация и с ФИО. Даже если кажется, что это ни к чему, храните эти данные в разных полях, и в будущем вы поблагодарите себя.
Установите для себя правила именования таблиц и полей
Сложно работать с данными, которые выглядят как-то так: user.firstName , user.last_name , user.birthDate . Конечно, каждый программист в праве сам выбирать для себя стиль наименования, но для SQL рекомендуется выбрать наименование с подчёркиванием. Потому что не все SQL-движки одинаково работают с заглавными буквами, а помещать всё в кавычки бывает утомительно.
Ещё нужно определиться как будут называться таблицы — во множественном числе ( users ) или в единственном ( user ). Каждая базовая структура в БД обычно настроена на множественное число, поэтому и именовать таблицы стоит соответственно.
Не упускайте возможность сложить побольше обязанностей на базу данных, чтобы облегчить себе работу над приложением и думать о его структуре, а не о контроле табличных связей.
Всё приходит с опытом. Спроектируйте две-три схемы, и картинка сама сложится у вас в голове. Отталкивайтесь от задачи —некоторыми рекомендациями иногда можно пренебречь.
Изучаем управление базами данных: — 7 лучших бесплатных систем с открытым исходным кодом
IT-отделы работают с мизерным бюджетом. Поэтому сокращение расходов позволит компании не только оставаться на плаву, но и направить сэкономленные средства на развитие. Чтобы рациональнее использовать имеющийся бюджет, познакомимся с 7 бесплатными системами, позволяющими осуществлять разработку и управление базами данных и решениями DBM с открытым исходным кодом.
CUBRID
Бесплатная программа для создания базы данных с открытым исходным кодом, оптимизированная специально для веб-приложений. Данный сервис предназначен для обработки больших объемов данных и генерации многочисленных параллельных запросов. Это решение реализовано на языке программирования C.
- Множественная степень дробления блокировок;
- Создание резервных копий онлайн;
- Инструменты GUI и драйверы для JDBC , PHP , Python , Perl и Ruby ;
- Поддержка встроенного сегментирования базы данных для масштабирования;
- В крупных системах данные разделяются по нескольким экземплярам базы данных;
- Репликация полнотекстовых баз данных и согласованность транзакций.
- Не работает в системах Apple ;
- Нет отладчика сценариев;
- Руководство доступно только на английском и корейском языках;
- Обсуждения на официальном форуме , как правило, устаревшие ( большинству из них несколько лет ).
Firebird
Этот конструктор баз данных использовался в производственных системах (под разными названиями) с 1981 года и реализует многие стандарты ANSI SQL . Firebird может работать на Linux , Windows и различных Unix-платформах .
- API трассировки для мониторинга в реальном времени;
- Аутентификация с проверкой подлинности Windows ;
- Четыре поддерживаемые архитектуры: SuperClassic , Classic , SuperServer и Embedded ;
- Разнообразные средства разработки: коммерческие инструменты – FIBPlus и IBObjects ;
- Возможность автоматического развертывания для очистки базы данных;
- Уведомления о событиях из триггеров базы данных и хранимых процедур;
- Бесплатная поддержка глобального сообщества Firebird . Что важно при разработке требований к базам данных.
- Интегрированная поддержка репликации не включена и доступна только в качестве дополнения;
- Нехватка временных таблиц и интеграции с другими системами управления базами данных;
- Аутентификация с проверкой подлинности Windows недостаточна по сравнению с решениями, доступными в других операционных системах.
Программное обеспечение для работы с базой данных MariaDB
Созданная разработчиками MySQL , MariaDB используется такими техническими гигантами, как Wikipedia , Facebook и даже Google . MariaDB – это сервер базы данных, который предлагает встраиваемую замену функционала MySQL . Безопасность является главным принципом и приоритетом разработчиков СУБД . В каждом релизе они добавляют все патчи безопасности MySQL и при необходимости улучшают их.
- Масштабируемость с простой интеграцией;
- Доступ в режиме реального времени;
- Основные функции MySQL ( MariaDB является альтернативой MySQL );
- Альтернативные механизмы хранения, оптимизация серверов и патчи;
- Обширная база знаний по разработке баз данных SQL , накопленная в течение 20 лет работы MariaDB .
- Отсутствует плагин проверки сложности пароля;
- Отсутствует memcached интерфейс ( распределённая система кэширования в оперативной памяти );
- Нет трассировки оптимизатора.
MongoDB
MongoDB была основана в 2007 году и известна как « база данных для великих идей ». Проект финансируется такими известными инвесторами, как Fidelity Investments , Goldman Sachs Group , Inc. , и Intel Capital . С момента своего создания MongoDB была скачена 20 миллионов раз и поддерживается более чем 1000 партнерами. Эти партнеры придерживаются принципа бесплатного решения с открытым исходным кодом.
- Проверка документов;
- Зашифрованный механизм хранения.
Популярные варианты использования:
- мобильные приложения;
- каталоги продуктов;
- управление контентом;
- Real-time приложения с механизмом хранения в памяти ( бета-версия );
- сокращает время между первичным сбоем и восстановлением.
- Не подходит для приложений, требующих сложных транзакций;
- Не подходит для устаревших приложений;
- Молодое решение: программное обеспечение меняется и быстро развивается.
MySQL
Самый именитый представитель нашего обзора программ для разработки базы данных . Бесплатная база данных MySQL существует с 1995 года и теперь принадлежит компании Oracle . СУБД имеет открытый исходный код. Также существует несколько платных версий, которые предлагают дополнительные функции, такие как гео-репликация кластера и автоматическое масштабирование.
Поскольку MySQL является отраслевым стандартом, она совместима практически со всеми операционными системами и написана на языках C и C ++ . Это решение является отличным вариантом для международных пользователей. Сервер СУБД может выводить клиентам сообщения об ошибках на нескольких языках.
- Проверка на стороне сервера;
- Может использоваться как локальная база данных;
- Гибкая система привилегий и паролей;
- Безопасное шифрование всего трафика паролей;
- Библиотека, которая может быть встроена в автономные приложения;
- Предоставляет сервер в качестве отдельной программы для сетевого окружения клиент/сервер.
Недостатки практической разработки и администрирования баз данных MySQL Приобретена компанией Oracle :
- пользователи полагают, что MySQL больше не подпадает под категорию бесплатного и открытого программного обеспечения;
- больше не поддерживается сообществом;
- пользователи не могут исправлять ошибки и патчи;
- проигрывает другим решениям из-за медленных обновлений.
PostgreSQL
PostgreSQL является еще одним выдающимся решением с открытым исходным кодом, работающим во всех основных операционных системах, включая Linux , UNIX ( AIX , BSD , HP-UX , SGI IRIX , Mac OS X , Solaris , Tru64 ) и Windows . PostgreSQL полностью отвечает принципам ACID ( атомарность, согласованность, изолированность, устойчивост ь).
- Возможность создания пользовательских типов данных и методов запросов;
- Среда разработки баз данных выполняет хранимые процедуры более чем на десятке языков программирования: Java , Perl , Python , Ruby , Tcl , C/C ++ и собственный PL/pgSQL ;
- GiST ( система обобщенного поиска ): объединяет различные алгоритмы сортировки и поиска: B-дерево , B+-дерево , R-дерево , деревья частичных сумм и ранжированные B+ -деревья ;
- Возможность создания для большего параллелизма без изменения кода Postgres , например, CitusDB .
- Система MVCC требует регулярной « чистки »: проблемы в средах с высокой скоростью транзакций;
- Разработка осуществляется обширным сообществом: слишком много усилий для улучшений.
SQLite
Провозгласившая себя самой распространенной СУБД в мире, SQLite зародилась в 2000 году и используется Apple , Facebook , Microsoft и Google . Каждый релиз тщательно тестируется. Разработчики SQLite предоставляют пользователям списки ошибок, а также хронологию изменений кода каждой версии.
- Нет отдельного серверного процесса;
- Формат файла – кросс-платформенный;
- Транзакции соответствуют требованиям ACID ;
- Доступна профессиональная поддержка.
Не рекомендуется для:
- клиент-серверных приложений;
- крупномасштабных сайтов;
- больших наборов данных;
- программ с высокой степенью многопоточности.
Есть идеи?
Я пропустила что-то из существенных преимуществ или недостатков решений для разработки баз данных , перечисленных выше? Считаете, что есть лучшие альтернативные СУБД ? Поделитесь своим мнением в комментариях.