Сравнение SQL и ORM

tcma13
4 min readAug 28, 2022

--

Есть несколько способов работать с базой данных при современной разработке, одним способом является использование ORM, другим — использование SQL.

Что такое SQL?

SQL — язык структурированных запросов (structured query language), используется для взаимодействия с базой данных напрямую.

Примеры запросов можно найти здесь

Что такое ORM?

ORM — объектно-реляционная проекция (object-relational mapping), тоже используется для взаимодействия с базой данных, но не напрямую, а через библиотеки, фреймворки или API, которые работают с языком, на котором разрабатывается программа.

Взаимодействие происходит посредством работы с моделями, уже написанных разработчиками. Разработчики придумали, как связать программный код с SQL-запросами, чтобы было удобнее. Теперь есть возможность не учить язык SQL, а работать непосредственно с кодом.

Разница между работой с SQL и ORM примерно такая же, как при работе с отсутствием синтаксического сахара, и с его наличием (на чем, по Вашему, легче писать, на Си или на Питоне, и почему? В Питоне много синтаксического сахара, а в Си его, насколько мне известно, нет.)

Примеры ORM-решений для некоторых языков программирования: Doctrine (PHP); Hibernate (JAVA); SQLAlchemy, Django (PYTHON); Sequalize (TYPESCRIPT).

Пример:

Код на Python, Django : https://habr.com/en/post/503526/

На скриншоте можно увидеть ту самую модель, о которой идет речь.

Теперь, для сравнения, делаются запросы.

На ORM:

Пример обращения к БД на ORM

На SQL:

Пример обращения к БД на SQL

Команды выполняются одни и те же, а записаны они по-разному.

Еще раз: при ORM мы общаемся с БД через программный код, а при SQL через SQL-запросы.

Что лучше использовать и почему?

  1. SQL-запросы работают с базой данных напрямую, а ORM-запросы нет. Поэтому при работе с ORM не обязательно хорошо знать SQL-запросы в деталях, знать их обязательно только тем, кто пишут библиотеки, фреймворки, API — абстракции. Разработчику, достаточно будет просто понимать язык, на котором он пишет.
    Если Ваш проект будет небольшим, можно ограничиться знанием ORM, это сэкономит время и оптимизирует работу.
  2. С ORM не нужно знать запросы под определенную базу данных. Существуют разные базы данных: реляционные и не реляционные, а те в свою очередь в каждой из групп подразделяются на отдельные продукты с отдельным синтаксисом.
    Если Ваш проект небольшой и при этом в Вашем проекте вы используете несколько баз данных — лучше использовать ORM, тогда не будет необходимости учить синтаксис одновременно, для , например, PostgreSQL, MySQL, SQLite и прочих БД, если это больше не пригодится.
  3. У ORM более высокая производительность на небольших проектах, а у SQL более высокая производительность на больших проектах.
    Если все-таки Вы допускаете, что проект будет расти, то стоит выбрать изучение SQL, со временем это пригодится.
  4. У ORM переносимости нет, у SQL переносимость есть.
    Поскольку использование ORM — это все равно, что использование специальных библиотек, фреймворков, API заточенных под определенный язык, то при желании переписать программу с языка Python на, например Java, придется переписывать заново абсолютно все команды, поскольку в Java нет фреймворка Django, и интерпретатор ничего не поймет, зато он поймет Hibernate, а Django и Hibernate — это разные фреймворки, которые не обязаны понимать друг друга.
    Если Вы допускате, что хотите переехать в обозримом будущем с одного языка на другой, лучше изучите SQL-запросы
  5. Асбтракции — зло , если вы имеете дело с большими проектами.
    Абстракции помогают ускорить разработку тем, кому это нужно, а так же позволяют уменьшить порог вхождения в разработку, но со временем приходит понимание того, что важно и нужно знать то, что происходит под капотом, поэтому рано или поздно приходится выходить из зоны комфорта — лучше рано.
    Если Ваш проект будет каждый раз расти, лучше изучайте SQL-запросы, так как, во-первых, со временем придется все равно изучить SQL, и получится так, что знание ORM = ORM+SQL, а знание SQL=знание SQL, а во-вторых , гораздо легче будет с отладкой программы.
  6. Полагаться на ORM = Полагаться на третьи лица
    Продукт, который Вы используете в качестве вспомогательного — писали не Вы, но раз уж он используется Вами, вы берете на себя ответственность за все уязвимости, которые могут быть в этом фреймворке, поэтому если будет найдена бреш в фреймворке, то она будет и в Вашем продукте, это стоит учитывать.
    Если Вы используете сторонние программы в Вашем проекте, будьте готовы к риску.
  7. Присутствие SQL Injection в ORM сведена к минимуму
    Поскольку Вам не приходится работать непосредственно с выражениями, гораздо сложнее будет проэксплуатировать уязвимость при наличии таковой.
    Если вы боитесь допустить SQLi в Вашем небольшом проекте, лучше используйте ORM. Или же хорошо изучите SQL, в том числе Prepared Statements.
  8. ORM занимается валидацией данных и уменьшает количество мусора, SQL — нет.
    Просто приятный бонус
  9. ORM занимается кэшированием данных, а SQL — нет.
    Тоже просто еще один приятный бонус от разработчиков ORM. Кэширование — это хорошо, но еще лучше, если оно настроено, как следует.

Sign up to discover human stories that deepen your understanding of the world.

Free

Distraction-free reading. No ads.

Organize your knowledge with lists and highlights.

Tell your story. Find your audience.

Membership

Read member-only stories

Support writers you read most

Earn money for your writing

Listen to audio narrations

Read offline with the Medium app

--

--

No responses yet

Write a response