HandlerSocketを発見し、多くの ORM をいじった後、私を悩ませていることの 1 つは次のとおりです。
SQL が存在する理由 まったく?
データベース ドライバーが InnoDB などへの直接的な方法を提供できず、さまざまな操作を ORM ライブラリ自体にラップできないのはなぜですか?
なぜ ORM -> SQL -> DB 解析 SQL -> DB エンジン操作なのですか?
ORM -> Db エンジン操作ができないのはなぜですか?
HandlerSocketを発見し、多くの ORM をいじった後、私を悩ませていることの 1 つは次のとおりです。
SQL が存在する理由 まったく?
データベース ドライバーが InnoDB などへの直接的な方法を提供できず、さまざまな操作を ORM ライブラリ自体にラップできないのはなぜですか?
なぜ ORM -> SQL -> DB 解析 SQL -> DB エンジン操作なのですか?
ORM -> Db エンジン操作ができないのはなぜですか?
まあ、どんな種類のORMも存在する前に、SQLが最初でした。簡単な歴史
そして、誰かがクエリ言語を使用したリレーショナル データベースのアイデアを思いつきました。幸いなことに、SQL と呼ばれる標準があります (SQL サーバー、オラクルなどの異なる SQL の方言にはわずかな違いがあります)。
そしてずっと後 (SQL はかなり古いものです) 誰かが SQL を使用してデータベースと通信する ORM を発明しました。
また、SQL なしのデータベース、オブジェクト指向データベース (OODBMS)、およびドキュメントのような ORM->DB を実現するためのいくつかの取り組みもあります。
SQL の目的は、標準を使用してデータベース内の情報を取得できる方法Structured Query Language
を提供することです。Structured
Query
Language
SQL は、global
データベースを操作するための標準を提供し、異なるプラットフォーム間でほとんどまたはまったく違いがありません。たとえば、SQL に精通している場合は、主要な DB などを扱うことができますSQL Server
mySql
&Oracle
構文の小さな違いはほとんどありませんが、少なくとも基本的な操作に関する限り、それらはあまり目立ちません。
ORMを使用する場合は、SQLをHibernateのHQLなどの他の何かに置き換えるだけです。
また、SQLはバックグラウンドで多くの作業を行うため、手動で実装する必要があります。SQLは、クエリの結果を指定できるように設計されています。次に、データベースにその方法を理解させます。
次のようなことを考えてください。
2011年に雇用され、所属する部門の平均給与よりも20%高い給与を持っているすべての従業員を取得してください。
SQLでこれを行うことはそれほど複雑ではありません。
select name,
salary,
deptno,
hire_date
from (
select name,
salary,
deptno,
avg(salary) over (partition by deptno) as avg_detp_salary,
hire_date
from employee
where extract(year from hire_date) = 2011
) as t
where salary >= avg_dept_salary * 1.20;
次に、クエリ言語(SQLでもORMクエリ言語でもない)がない場合にこれをどのように行うかを考えてみましょう。
多くの人が利用しているから存在します。SQL と互換性のある非常に優れたツールが多数あります。ODBC、JDBC。
SQL は非常に古風だと思いますが、ほとんどすべてのデータベース エンジンで動作し、SQL の機能を使用してデータを操作できる、これ以上のものはありません。
ORM、Linq、OLAPなど、データを操作するための最新のツールがいくつかあり、今日のニーズにより快適に使用できますが、目的が異なり、互換性がありません。
そしてもう1つ-多くのORMをいじりました。それが問題だ。多くの ORM があり、互換性がなく、人々はお互いに学ばなければなりません。SQL は 1 つの言語です (異なるデータベース エンジンではいくつかの小さな違いがあります。