关系数据库管理系统与对象数据库

时间:2009-04-23 03:56:45

标签: database architecture orm

我是一所大学的研究助理。我们正在重新设计我们的软件架构主题,希望“现代化”,并解决我们在过去学期中发现的一些教学和协作学习问题。

要求学生使用Eclipse快速构建其架构系统的原型。

为了坚持不懈,我们引导学生学习HSqlDb。

上个学期,我们收到了重要的反馈意见,即编写数据访问层并映射到OO需要花费大量时间。这种管道工作可以更好地用于更相关的事情,例如扩展,端到端性能或满足更多场景。

在现实世界的制作中,我会选择像Hibernate这样的ORM技术,但是这个主题已经过于复杂而无法教授另一种技术(Hibernate对于学生来说是一个很大的学习恕我直言)。

所以,我向SO社区提问:

  • 我们应该考虑给学生一个面向对象的数据库(如果它们仍然存在)?这节省了ORM和管道的时间
  • 我们应该坚持使用RDBMS并告诉学生自己推出ORM吗?
  • 我们是否应该指导学生使用轻量级,简单的ORM?

请记住,这不是现实世界,但我们希望尽可能地教授现实世界的技能。教学ORM并不像让学生快速建立满足场景的系统原型一样重要。

我是一名C#开发者,但学生们在进入这一主题时只熟悉Java。

5 个答案:

答案 0 :(得分:5)

我必须全心全意地不同意在教育环境中使用ORM。您需要能够在运行之前行走,并且利用ORM消除了在应用程序中使用关系数据库的学习过程中非常重要的一步。您应该坚持使用非常轻量级的数据访问框架 - 一个要求学生编写自己的SQL并且(最好)不允许将此范围的代码绑定到UI或(至少)不需要它

我确实不熟悉Java世界,因为它与实际的企业发展有关,但我(有点不情愿地)意识到它是教育系统中的环境。虽然我相信学生应该接触.NET,这是另一个时间的争论;)在任何情况下,我都非常确定那里有某种框架可以满足这一要求。

我愿意下注,那里有一些提供代码生成功能的东西。在我以前的工作中,我们只使用.NET数据库库来从(相对)低级别读取数据库中的数据。我们没有使用任何存储库或更改跟踪技术,而是使用了我们自己的存储库。 SQL命令是手工编写的,但框架仍然提供了类型安全性和丰富的设计器支持。我的观点是两者都有可能。我建议在Java中找到与此类似的东西,要求学生手动编写这些适配器中的一个或两个以获得对它们的内容的理解,然后让代码生成器根据它们的SQL执行其他“gruntwork”管道工作语句。

不要使用任何SQL生成。在让计算机为您完成之前,您必须能够编写SQL。第二个你使用ORM做一些你不知道如何在SQL中做的事情是你失去对数据库模型的控制的第二个,他们需要理解这一点。

答案 1 :(得分:3)

作为一个热心拥抱OO和RDBMS勉强接受的人......我鼓励甚至乞求计算机科学部门将关系数据库的理论和实践保持在前台。如果即使在为OO类使用ORM时也可以这样做,那么就去做吧。但我更愿意看到大学毕业的学生认为OO - 关系映射 很难,而为什么很难,这并不意味着关系模型坏了。



无论如何非常

答案 2 :(得分:1)

如果主要目标是让学生学习,那么我认为使用RDBMS将是更好的方法 - 他们已经必须在应用程序方面理解对象模型,从而将关系结构与整体架构组合进行协调是一项重要的技能。

关于提供像Hibernate这样的ORM,我并不认为这是学生学习的重要内容。关于Hibernate最好的事情之一就是它的难度水平与你深入挖掘它的深度相关。它具有非常低的进入门槛(不到一天的IMO)来实现基础知识,而且通常只需要基础知识 - 特别是像原型这样的东西,这就是你所说的这项活动的目标。当然,它不需要学习到这样的程度,以至于它会坚持超出课程范围的学生。基本的Hibernate使用可能是一次性技能。

总而言之,我建议坚持使用RDBMS并提供像Hibernate这样的ORM。

答案 3 :(得分:1)

看一下DataObjects.Net - OR / M框架和对象数据库(如果使用内置存储提供程序)的共享优势,允许在支持的存储之间透明地迁移。

从架构和扩展的角度来看,这是非常先进的:例如,请查看this post关于其查询优化技术。

答案 4 :(得分:0)

我认为这很大程度上取决于学生们对课程的了解。我说这个的原因是,最好从他们熟悉的东西开始,然后从那里开始。根据我的经验,大多数学生了解对象是什么以及如何使用它们,因此将SQL表作为对象呈现似乎是一个很好的起点。

如果您同意我的意见,那么您可能也同意ORM是将年轻程序员从面向对象编程的舒适区转变为数据库编程新世界的绝佳方式。

我并不是很熟悉Java可用于实现ORM的工具,但是我能够在几天内用C#(使用LINQ to MySQL)来获取它(在尝试学习PHP之后惨遭失败)几个星期)。如果在C#中实现项目是可能的,那么使用LINQ的好处在于它让学生了解查询在SQL中的外观,而不会离开他们的OOP舒适区域(假设他们至少在开发中感觉很舒服) 。净)。这使您可以教授数据库编程的概念,而无需花太多时间讨论它的实现。然后,一旦他们掌握了这些概念,您就可以回滚并向他们展示如何在OOP之外执行类似的实现(使用SQL,PHP,JSP等)。

更不用说,它给了他们一个很好的预览,他们可以使用最新的.NET技术来做一些非常先进的东西而不需要太多的努力(无论如何,这对他们来说可能更长远)。

祝你好运!