Говоря о спящем режиме и других ORM, евангелисты ORM говорят о SQL как о языке ассемблера для баз данных.
Я думаю, что скоро это утверждаю, но я думаю, что в ближайшем будущем может быть правдой, не уверен.
Обновлено: Аналогия, о которой я говорил, означает, что SQL относится к сборка, как ORM относится к C / Java / C#. Конечно, точная аналогия невозможна. Вопрос в том, собираются ли разработчики в будущем на более мощных компьютерах использовать только ORM (или вроде ORM) вместо SQL.


Нет, это не так. Люди, которые говорят, что никогда не кодировали сборку.
Я написал код сборки и рассматривал SQL как язык ассемблера db. Почему? Потому что это родной язык для БД.
Нет, однако вы могли бы сказать, что SQL - это C баз данных. Оба они ориентированы на данные процедурные и императивные, и, а не на объектно-ориентированные. И поскольку C легче моделировать объекты и функциональность на более высоких языках, но, в конце концов, C является базой для измерения производительности.
Процедурные и императивные? Нет, если вы правильно напишете. Хорошо написанный SQL должен быть декларативным и основанным на наборах.
Точно нет.
Ассемблер - это язык очень низкого уровня, на котором вы указываете процессору, что именно ему делать, включая регистры, которые вы хотите использовать, и т. д.
SQL - это язык очень высокого уровня, в котором вы описываете семантику того, что хотите, а затем оптимизатор запросов решает, как это выполнить, поэтому вы даже не контролируете то, что выполняется. Это чрезвычайно мощный и гибкий язык, из которого любой ORM предлагает самое большее (довольно небольшое) подмножество.
Вы заметите, что платформа .NET недавно представила LINQ, который представляет собой способ внедрения высокоуровневых SQL-подобных конструкций в такие языки, как C# и VB. Вместо того, чтобы быть похожим на ассемблер, довольно легко утверждать, что SQL работает на более высоком уровне абстракции, чем большинство основных языков программирования.
@chadmyers - Я не вижу от вас ответа, в чем суть. Хотите уточнить? (обратите внимание, что в моем ответе было написано перед обновление вопроса, поэтому, если вы думаете, что он не отвечает на обновление, я буду рад уточнить, почему ORM не выше уровня, чем простой старый SQL)
Нет, SQL сам по себе является уровнем абстракции высокого уровня, который (в основном) не зависит от базы данных.
Не верьте этой чуши.
Нет, реляционная алгебра - это «ассемблерный код» базы данных.
SQL - это «код C», читаемый и достаточно близкий к «оборудованию», чтобы иметь возможность превзойти все эти другие языки высокого уровня, если вы знаете, что делаете :-).
+1 SQL семантически близок к реляционной алгебре - теоретической модели, лежащей в основе технологии РСУБД. Он специально разработан для решения поставленной задачи и является отличным примером широко используемого предметно-ориентированного языка.
За исключением того, что люди не используют его таким образом, они используют его для написания процедурной логики if / then, которая не предназначена для SQL.
Я слышал много сук о несоответствии импеданса между реляционными и объектно-ориентированными за последние годы.
Мой ответ всегда заключался в том, что действительно существует очень большое несоответствие импеданса - между негибким «все является объектом и только объектом» и удивительно гибкими и сложными «данными», описывающими вещи реального мира; эти данные можно комбинировать в разных пока неизвестны способы получения математически доказываемых результатов ".
OO - не единственные фруктовые парни.
Если вы выполняете только онлайн-обработку транзакций, вы используете только простые операторы sql. Hibernate может генерировать их за вас.
Но если вы хотите создавать отчеты, анализировать данные или выполнять быстрые массовые действия, вам необходимо изучить SQL, и вы часто будете использовать специальные расширения SQL от производителя. Например, запрос иерархических данных возможен, когда вы используете SQL, зависящий от поставщика.
Если вы хотите правильно использовать SQL, вы должны мыслить наборами, а не построчно крошечными операторами. Поэтому я говорю, что это полная противоположность ассемблера.
Это в следующем смысле: ORM предоставляет высокоуровневый предметно-ориентированный API, который генерирует операторы SQL, точно так же, как высокоуровневый язык создает предметно-зависимые API-интерфейсы и генерирует операторы машинного языка.
То есть:
Однако я не имею в виду, что люди перестанут использовать SQL и предпочтут ORM, точно так же, как люди перестали использовать сборку и предпочитают HLL.
ORM - это способ карта одной идиомы на другую с относительно равным статусом. Однако тот факт, что вы смотрите на это с точки зрения программиста, не делает SQL подчиненным. Считаете ли вы немецкий подчиненным английскому, потому что вы, говорящий по-английски, знаете немецкого переводчика?
@Mark: используя вашу терминологию, сборка «равна» HLL или «подчинена»? Но это правда, что я смотрю на это с точки зрения программиста.
SQL имеет некоторые общие черты с языком ассемблера:
Однако, в отличие от ассемблера, SQL - это язык высокого уровня, независимый от платформы. Также нет стандарта ANSI / ISO для ассемблера.
Сравним написание распараллеленного SQL с написанием распараллеленного ассемблера.
Это способ написать распараллеленный оператор sql в Oracle:
select /*+ parallel (e, 4) */ deptno,count(*)
from employees e
group by deptno
Теперь я хотел бы рассказать вам, как написать параллельный ассемблер, но я сильно сомневаюсь, что это так же просто, как добавить что-то вроде / + parallel (e, 4) /.
этого никогда не случится. SQL - это действительно dsl, которым явно не является ассемблер. Сопоставление реляционной базы данных с объектной моделью полезно, но не единственная цель базы данных, то есть базы данных являются небольшой частью того, для чего используются базы данных, и поэтому sql всегда будет оставаться диалектом выбора для работы с базами данных!
RPG - это ассемблер баз данных. :-)
Это не дает ответа на вопрос. Чтобы критиковать или запрашивать разъяснения у автора, оставьте комментарий под его сообщением.
@Seki посмотри на РПГ и приходи снова.
не совсем. Но я дам тебе одну. ORM - это кувалда, SQL - обычный молоток. В большинстве случаев ... все, что вам нужно, это молоток, а иногда вы даже можете использовать его, чтобы вытащить гвозди.