【发布时间】:2014-06-11 00:49:31
【问题描述】:
ORM(对象关系映射)
它看起来像一个模型,将关系型数据库(如 MySQL)的操作封装为对象,并提供程序化方法(例如 object.getMax())在程序中操作数据库。
ODBC(开放式数据库连接)
它似乎是不同数据库之间的连接器。
比如LIQN,属于哪一种? ODBC 是 ORM 的实现吗?
【问题讨论】:
ORM(对象关系映射)
它看起来像一个模型,将关系型数据库(如 MySQL)的操作封装为对象,并提供程序化方法(例如 object.getMax())在程序中操作数据库。
ODBC(开放式数据库连接)
它似乎是不同数据库之间的连接器。
比如LIQN,属于哪一种? ODBC 是 ORM 的实现吗?
【问题讨论】:
这是两个非常大的东西,但我会给你一个粗略的概述......
开放式数据库连接是一种与数据库对话的规范。这是您的客户和数据库将要使用的“语言”。
ORM 是一个由很多工具实现的概念。这是一个将对象映射到关系数据库的概念,以便您在面向对象的代码中与您的数据库进行对话。 LINQ to SQL 是一个 ORM 的实现。它可能会使用 ODBC 类型的连接来执行对象和数据库之间的连接。
有大量关于此的视频、博客和课程。
【讨论】:
ORM 是一种将类和对象映射到关系表的技术(在抽象意义上)。例如,在没有 ORM 的情况下,如果您执行 SQL 查询,您将获得一个包含表行的结果集,并且在这些行中包含列。无论您是查询汽车还是人员,结果集的格式始终相同。使用 ORM,您的程序可以获取 Car 或 Person 类的实例,以供使用。
ODBC 是一个中间件 API,它统一了对各种数据源的访问。它试图消除协议之间的差异,以便您的代码可以连接到许多不同的引擎,而不必担心每个协议使用哪个协议。
LINQ 是一种查询语言。一些 LINQ 提供者将是 ORM,而一些可能通过 ODBC 访问数据库;但这三个都是不同的概念。
您可以在 LINQ 中编写查询,它的提供者可以通过 ODBC API 访问数据库,并将结果作为 ORM 返回给您(即将结果映射到表示数据库记录的对象)。
这些步骤中的每一个都可以用一个更基本的步骤代替:你可以用 SQL 的 PostgreSQL 方言编写查询;使用 PostgreSQL 特定协议通过 PostgreSQL 驱动程序访问数据库;并将数据作为包含特定数量的列的行集合返回。
或者您可以做任何组合:通过 ODBC 访问但获取行/列;在直接的专有协议连接上使用 ORM。
【讨论】:
区别在于:
ODBC 将记录集作为元组返回
创建一个新的命令 dbhandle 用于进一步操作数据库
ORM 将记录集作为对象返回
自省数据库以发现其主键和外键关系以建立表类之间的交叉链接
参考文献
【讨论】: