5

HandlerSocketを発見し、多くの ORM をいじった後、私を悩ませていることの 1 つは次のとおりです。

SQL が存在する理由 まったく?

データベース ドライバーが InnoDB などへの直接的な方法を提供できず、さまざまな操作を ORM ライブラリ自体にラップできないのはなぜですか?

なぜ ORM -> SQL -> DB 解析 SQL -> DB エンジン操作なのですか?

ORM -> Db エンジン操作ができないのはなぜですか?

4

4 に答える 4

1

まあ、どんな種類のORMも存在する前に、SQLが最初でした。簡単な歴史

  • 最初に、データを順次ファイルに保存しました
  • 後で直接ファイル (clients.dat) を使用しました。
  • その後、最初の非リレーショナル DB が登場しました (これを確認してください) 。

そして、誰かがクエリ言語を使用したリレーショナル データベースのアイデアを思いつきました。幸いなことに、SQL と呼ばれる標準があります (SQL サーバー、オラクルなどの異なる SQL の方言にはわずかな違いがあります)。

そしてずっと後 (SQL はかなり古いものです) 誰かが SQL を使用してデータベースと通信する ORM を発明しました。

また、SQL なしのデータベース、オブジェクト指向データベース (OODBMS)、およびドキュメントのような ORM->DB を実現するためのいくつかの取り組みもあります。

于 2012-11-29T10:20:04.097 に答える
1

SQL の目的は、標準を使用してデータベース内の情報を取得できる方法Structured Query Languageを提供することです。StructuredQueryLanguage

SQL は、globalデータベースを操作するための標準を提供し、異なるプラットフォーム間でほとんどまたはまったく違いがありません。たとえば、SQL に精通している場合は、主要な DB などを扱うことができますSQL Server mySql&Oracle 構文の小さな違いはほとんどありませんが、少なくとも基本的な操作に関する限り、それらはあまり目立ちません

于 2012-11-29T10:23:35.870 に答える
0

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クエリ言語でもない)がない場合にこれをどのように行うかを考えてみましょう。

于 2012-11-29T11:12:25.167 に答える
-1

多くの人が利用しているから存在します。SQL と互換性のある非常に優れたツールが多数あります。ODBC、JDBC。

SQL は非常に古風だと思いますが、ほとんどすべてのデータベース エンジンで動作し、SQL の機能を使用してデータを操作できる、これ以上のものはありません。

ORM、Linq、OLAPなど、データを操作するための最新のツールがいくつかあり、今日のニーズにより快適に使用できますが、目的が異なり、互換性がありません。

そしてもう1つ-多くのORMをいじりました。それが問題だ。多くの ORM があり、互換性がなく、人々はお互いに学ばなければなりません。SQL は 1 つの言語です (異なるデータベース エンジンではいくつかの小さな違いがあります。

于 2012-11-29T10:39:28.443 に答える