关系型数据库管理系统与对象数据库的比较

3

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

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

对于持续性,我们指导学生使用HSqlDb。

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

在真实的生产环境中,我会选择ORM技术,如Hibernate,但该学科已经太复杂,无法教授另一项技术(在我看来,对于学生来说,Hibernate是一个巨大的学习量)。

因此,我向SO社区提出以下问题:

  • 我们是否应考虑给学生提供面向对象数据库(如果它们仍然存在)?这将节省ORM和管道的时间
  • 我们是否应坚持使用关系数据库,并告诉学生自行开发ORM?
  • 我们是否应将学生指向轻量级、简单的ORM?

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

我本质上是一名C#开发人员,但学生只熟悉Java。


Ted Neward的文章《计算机科学的越南》(The Vietnam of Computer Science)在这里似乎很相关。 - Air
5个回答

5
我不得不全心全意地反对在教育环境中使用ORM。在应用程序中使用关系数据库的学习过程中,您需要先行走再跑步,而利用ORM则省略了这一非常重要的学习步骤。您应该坚持使用非常轻量级的数据访问框架 - 一个需要学生编写自己的SQL并且(在最好的情况下)不允许此代码范围与UI绑定或者(至少)不要求它。
我承认对于Java世界与实际企业开发相关的内容还不熟悉,但我意识到(有些勉强)它是教育系统中的 THE 环境。尽管我认为应该让学生接触 .NET,但那是另一个时间的争论;无论如何,我相当确定那里有一些框架能够满足这个需求。
我敢打赌,存在可以提供一些代码生成功能的东西。在我以前的工作中,我们只使用 .NET 数据库库到从数据库中相对较低级别的读取数据点。我们没有使用任何存储库或更改跟踪技术,而是自己实现。SQL 命令是手写的,但框架仍然提供类型安全和丰富的设计师支持。我的观点是这两种方法都是可以实现的。我建议在Java中找到类似的东西,要求学生手工编写一到两个适配器以了解其中的内容,然后让代码生成器根据他们的 SQL 语句完成其他“苦力”管道工作。
不要使用任何SQL生成。必须能够在计算机为您执行操作之前编写SQL。在您使用ORM执行不知道如何在SQL中执行的操作时,您失去了对数据库模型的控制,他们需要明白这一点。

先学会走路再跑步。首先,手动地从代码转换对象和类到SQL,直到学生们理解了这个过程,再使用ORM自动进行操作。但是这一步只能在稍后进行。 - umlcat

3
作为一个热情拥抱面向对象编程的人,不情愿地使用关系型数据库……我强烈鼓励,甚至恳请计算机科学专业将关系数据库的理论和实践放在首要位置。如果您使用ORM来处理面向对象类,那么即使如此也可以做到。但是,我更希望看到大学生们理解面向对象 - 关系映射很难,并知道为什么它很难,这并不意味着关系模型已经失效。



总之,它并没有太糟糕。


1

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

从架构和扩展点来看,它非常先进:例如,查看this post关于其查询优化技术的文章。


1
如果主要目标是让学生学习,那么我认为在这里使用关系型数据库管理系统会是更好的选择 - 他们已经必须理解应用程序端的对象模型,因此将关系结构协调到整体架构组合中是一项重要技能。
至于提供像Hibernate这样的ORM,我不太同意它对学生来说是一项庞大的学习任务。 Hibernate最好的一点是,它的难度水平与您深入挖掘多少相关联。 它具有非常低的入门门槛(个人认为不到一天),并且通常基础知识就足够了 - 特别是对于原型之类的东西,这正是您所说的这项活动的目标。 当然,它不需要学习到一个程度,以至于超出了课程范围后仍会留存于学生心中。 基本的Hibernate使用可以是一种即弃技能。
因此,总结一下,我建议坚持使用关系型数据库管理系统,并提供像Hibernate这样的ORM。

0

我认为这很大程度上取决于学生在课程开始前所掌握的知识。我之所以这么说,是因为最好从他们都熟悉的东西开始,并从那里向前推进。根据我的经验,大多数学生都理解对象是什么以及如何使用它们,因此将SQL表格呈现为对象似乎是一个很好的起点。

如果你到目前为止同意我的观点,那么你可能也会同意ORM是将年轻程序员从面向对象编程的舒适区过渡到数据库编程的新世界的好方法。

我对Java实现ORM的工具不是很熟悉,但我在C#中使用LINQ to MySQL只用了几天就学会了(之前试图学习PHP失败了好几周)。如果在C#中实现项目是可能的,那么使用LINQ的好处在于它让学生感受到查询在SQL中的样子,而不离开他们的OOP舒适区(假设他们至少有点熟悉.NET开发)。这使您能够教授数据库编程的概念,而不必花费太多时间谈论其实现。然后,一旦他们掌握了这些概念,您可以回过头来向他们展示如何在OOP之外执行类似的实现(使用SQL、PHP、JSP等)。

更不用说,它为他们提供了一个很好的预览,展示了他们如何使用最新的.NET技术轻松地完成一些相当高级的任务(这对他们长期来说可能更有益)。

祝你好运!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接