Эссе базы данных
задний план
В настоящее время в индустрии разработки программного обеспечения, будь то разработка мобильных терминалов или back-end разработка, в основном встречается разработка базы данных.Здесь я расскажу о мыслях автора о базе данных.
конфликт
В мобильной или серверной разработке много раз мы чувствуем, что есть некоторые недостатки, будь то ORM или другие решения.На самом деле это происходит из-за конфликта между самой базой данных и самим языком разработки.Современные языки в основном все Это объектно-ориентированная разработка. Объектно-ориентированная разработка основана на основных принципах разработки программного обеспечения (таких как связь, агрегация и инкапсуляция), а реляционные базы данных разработаны на основе математической теории. Между этими двумя наборами теорий есть существенные различия. .
База данных возникла из файла в начале.Программа открыла файл, затем сохранила некоторые данные в файле и, наконец, закрыла файл.По этому требованию была разработана база данных. В настоящее время существует два основных типа основных реляционных баз данных, одна из которых представляет собой базу данных, основанную на сетевой передаче, а другая представляет собой встроенную базу данных.Разница между двумя базами данных заключается в том, существует ли идеальное управление полномочиями и является ли серверный код встроен в программу.
Независимо от того, какая реляционная база данных, разработчики имеют дело с ней через язык SQL.Основная технология ORM на самом деле только запрашивает данные из базы данных, считывает каждое поле в наборе результатов по элементам, а затем собирает их в объект, или ему нужно to Каждый атрибут объекта извлекается, объединяется в строку SQL, а затем отправляется в базу данных.
ORM-технология
В широком смысле ORM относится к взаимному преобразованию между объектно-ориентированной объектной моделью и структурой данных реляционной базы данных. В узком смысле ORM можно рассматривать как хранилище данных на основе реляционной базы данных, реализующее виртуальный объектно-ориентированный интерфейс доступа к данным. Упомянутая здесь ORM относится к такому фреймворку, как Hibernate.Что касается преимуществ фреймворка ORM, то мы не будем говорить о преимуществах фреймворка ORM.В общем случае персистентному классу соответствует таблица, каждый экземпляр класса соответствует записи в таблице, а каждый экземпляр класса соответствует записи в таблице.Каждый атрибут соответствует каждому полю таблицы. Однако в самом языке SQL существует конфликт, поэтому давайте сначала разделим требования.
- База данных должна выполнять миграцию (например, создание таблиц, добавление полей, удаление полей, описание значений по умолчанию, добавление индексов, добавление ограничений и т. д.)
- Таблицы и таблицы связаны отношениями
- Операторы SQL позволяют выбирать только те столбцы, которые вам нужны.
- Типобезопасность параметров и результатов инструкции SQL не гарантируется.
- Результат может быть фиктивным, например, хранимые процедуры и представления.
Объектно-ориентированное и описанное выше поведение на самом деле несовместимы, например, абстрагирование таблицы как класса, и каждый экземпляр класса представляет собой строку данных, которая выглядит идеально, но есть скрытый недостаток.
- Во-первых, основные операции с базой данных в основном состоят из CRUD.В целом, синтаксис добавления, удаления и обновления похож, и их легко абстрагировать, но запрос не простой, и внимание к данным не то же самое, поэтому Требуемый оператор запроса отличается С точки зрения запроса ORM трудно охватить все ситуации.
- Во-вторых, в объектно-ориентированном подходе существует наследование.Если между двумя объектами существует отношение наследования, как спроектировать структуру таблицы,
В настоящее время существует много основных технологий ORM. Hibernate — типичная технология ORM, описанная выше, а Mybatis — полуавтоматическая технология ORM. Давайте поговорим о Mybatis здесь.
- Mybatis не имеет функции миграции, она должна поддерживаться сторонними функциями
- Mybatis выполняет только сопоставление SQL с объектами, сам класс не представляет таблицу данных, а преобразованные объекты предоставляются в виде POJO. На самом деле это привязка поля
То есть сама ORM должна делать две вещи.
- Сама таблица сопоставления и миграция
- Привязка атрибутов и полей базы данных
Поскольку Mybatis слишком сильно зависит от SQL, замена базовой базы данных вызовет большую рабочую нагрузку по миграции. Hibernate не имеет этой проблемы, но Hibernate действительно недостаточно гибок. Я также только что говорил о проблеме SQL-запроса. , поэтому, если Hibernate хочет быть гибким, это слишком дорого. Оба имеют преимущества и недостатки.
Значение ORM
ORM имеет два основных значения
- Предотвращение внедрения и обеспечение безопасности SQL
- Абстрактное ООП для легкой разработки
В дополнение к двум вышеупомянутым ORM существует также более легкое техническое решение, которое заключается в предоставлении набора функций, аналогичных вызовам функций для написания SQL-запросов, и обеспечении безопасности с помощью подсказок кода IDE и проверок синтаксиса компилятора. План самый гибкий. но сложнее
С точки зрения защиты от инъекций, обычной практикой является использование связанных параметров и подготовленных операторов, чтобы избежать конкатенации строк, или использование методов, предотвращающих усечение SQL входящими одинарными кавычками заранее.
Идеи для вопроса запроса
Поскольку существует такая большая проблема с запросом к базе данных, и необходимо обеспечить безопасность SQL, у автора есть две идеи.
- Инкапсуляция часто используемых операций, охватывающая большинство сценариев
- Обеспечить безопасные базовые средства для решения особых ситуаций запроса