Проектирование баз данных windows

Как спроектировать базу данных, чтобы в будущем не пришлось её переписывать — базовые советы

Как спроектировать базу данных, чтобы в будущем не пришлось её переписывать — базовые советы

Прим. перев. Предполагается, что вы уже имеете начальные знания по SQL. Если вы плохо понимаете, что такое таблицы, строки, индексы, первичные ключи и ссылочная целостность, то лучше сначала изучить их, например по этим видео:

А если вы знакомы с SQL и вас не остановили предыдущие термины, на всякий случай напомним, что:

  • атомарность предполагает, что значение нельзя разделить на несколько атрибутов;
  • под кортежем понимается запись (строка) в таблице базы данных;
  • атрибут — это колонка таблицы;
  • неключевой атрибут — это атрибут, не входящий в состав никакого потенциального ключа.

Есть минимум два требования, которые должны быть соблюдены при проектировании структуры БД:

  1. Сохранить всю информацию после разделения её на таблицы.
  2. Минимизировать избыточность того, как эта информация хранится.

Примечание Второй пункт важен не только из-за того, что избыточность влияет на размер БД. Чаще всего при обновлении данных нужно обработать много строк. В таком случае вы рискуете просто забыть обновить некоторые из них, что приведёт к коллизиям внутри БД.

Ниже перечислены некоторые рекомендации, которые помогут добиться эффективной структуры:

  • используйте хотя бы третью нормальную форму;
  • создавайте ограничения для входных данных;
  • не храните ФИО в одном поле, также как и полный адрес;
  • установите для себя правила именования таблиц и полей.

Используйте хотя бы третью нормальную форму

Нормальные формы — это требования, которые должны соблюдаться при правильной проектировке базы данных.

19–21 апреля, Онлайн, Беcплатно

Нормальных форм существует целых 6 штук, однако обычно соблюдают всего лишь 3 и для начала этого более чем достаточно.

Первая нормальная форма

Для примера будем использовать отношение сотрудники_отделы_проекты. В нём есть информация о номере сотрудника, его фамилии, номере отдела, в котором он работает, номере телефона отдела и так далее.

Это отношение, как и любое другое, автоматически находится в первой нормальной форме:

  • в отношении нет одинаковых кортежей;
  • кортежи не упорядочены;
  • атрибуты не упорядочены и различаются по наименованию;
  • все значения атрибутов атомарны.

Вторая нормальная форма

В нашем случае у таблицы выше имеется сложный (составной) ключ <Н_СОТР, Н_ПРО>. От части ключа Н_СОТР зависят неключевые атрибуты ФАМ , Н_ОТД , ТЕЛ . От части ключа Н_ПРО зависит неключевой атрибут ПРОЕКТ . А вот атрибут Н_ЗАДАН зависит от всего составного ключа, так как сотрудник может выполнять одно задание в одном проекте.

Читайте также:  Windows не видит vhdx

Поэтому для приведения отношения ко второй нормальной форме из отношения сотрудники_отделы_проекты нужно выделить два отношения сотрудники_отделы и проекты, а исходное отношение оставим отношением задания.

Наконец, третья нормальная форма

Отношение находится в третьей нормальной форме, когда отношение находится во второй нормальной форме и все неключевые атрибуты взаимно независимы.

Для того, чтобы устранить зависимость неключевых атрибутов, нужно произвести декомпозицию отношения ещё на несколько отношений. При этом те неключевые атрибуты, которые являются зависимыми, выносятся в отдельное отношение.

Отношение сотрудники_отделы не находится в третьей нормальной форме, так как имеется зависимость неключевых атрибутов, таких как зависимость номера телефона от номера отдела. Поэтому декомпозируем отношение сотрудники_отделы на два отношения — сотрудники и отделы:

Используйте проверочные ограничения

База данных — это не просто набор таблиц. В неё встроено много инструментов, которые помогут с сохранностью и качеством данных.

В первую очередь БД поможет с ограничением значений, которые принимают поля.

Внешние ключи регламентируют отношения между таблицами. Благодаря им сильно упрощается контроль за структурой базы, уменьшается и упрощается код приложения. Правильно настроенные внешние ключи — это гарант того, что увеличится целостность данных за счёт уменьшения избыточности. Поэтому обязательно применяйте ограничение внешнего ключа при определении связей между таблицами.

Выражения ON DELETE и ON UPDATE внешних ключей используются для указания действий, которые будут выполняться при удалении строк родительской таблицы ( ON DELETE ) или изменении родительского ключа ( ON UPDATE ). Не пренебрегайте ими.

Стоит убедиться, что обязательность заполнения ( NOT NULL ) проверяется для полей, которые строго не должны оставаться пустыми.

Используйте CHECK , чтобы убедиться, что значения входят в диапазон (например чтобы цена не была отрицательной).

Не храните ФИО в одном поле, также как и полный адрес

Представим ситуацию, когда вам понадобится узнать, в каком городе продукт более популярен. В таком случае, если полный адрес хранится в виде цельной строки, сделать это будет очень тяжело, ведь вам нужно будет каким-то образом выделить из этой строки город. Учитывая все возможные форматы и варианты адресов, эта задача становится практически невыполнимой. Похожая ситуация и с ФИО. Даже если кажется, что это ни к чему, храните эти данные в разных полях, и в будущем вы поблагодарите себя.

Установите для себя правила именования таблиц и полей

Сложно работать с данными, которые выглядят как-то так: user.firstName , user.last_name , user.birthDate . Конечно, каждый программист в праве сам выбирать для себя стиль наименования, но для SQL рекомендуется выбрать наименование с подчёркиванием. Потому что не все SQL-движки одинаково работают с заглавными буквами, а помещать всё в кавычки бывает утомительно.

Ещё нужно определиться как будут называться таблицы — во множественном числе ( users ) или в единственном ( user ). Каждая базовая структура в БД обычно настроена на множественное число, поэтому и именовать таблицы стоит соответственно.

Не упускайте возможность сложить побольше обязанностей на базу данных, чтобы облегчить себе работу над приложением и думать о его структуре, а не о контроле табличных связей.

Читайте также:  Аналог freedom vpn linux

Всё приходит с опытом. Спроектируйте две-три схемы, и картинка сама сложится у вас в голове. Отталкивайтесь от задачи —некоторыми рекомендациями иногда можно пренебречь.

Изучаем управление базами данных: — 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 партнерами. Эти партнеры придерживаются принципа бесплатного решения с открытым исходным кодом.

  • Проверка документов;
  • Зашифрованный механизм хранения.
Читайте также:  Все dns сервера linux

Популярные варианты использования:

  • мобильные приложения;
  • каталоги продуктов;
  • управление контентом;
  • 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 ;
  • Доступна профессиональная поддержка.

Не рекомендуется для:

  • клиент-серверных приложений;
  • крупномасштабных сайтов;
  • больших наборов данных;
  • программ с высокой степенью многопоточности.

Есть идеи?

Я пропустила что-то из существенных преимуществ или недостатков решений для разработки баз данных , перечисленных выше? Считаете, что есть лучшие альтернативные СУБД ? Поделитесь своим мнением в комментариях.

Оцените статью