【问题标题】:Relational database management system vs object database关系数据库管理系统与对象数据库
【发布时间】:2009-04-23 03:56:44
【问题描述】:

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

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

为了持久性,我们已引导学生使用 HSqlDb。

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

在实际制作中,我会选择一种 ORM 技术,例如 Hibernate,但该主题已经太复杂而无法教授另一种技术(恕我直言,Hibernate 对于学生来说是一个需要学习的大量技术)。

那么,我向 SO 社区提出的问题:

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

请记住,这不是现实世界,但我们希望尽可能多地教授现实世界的技能。教授 ORM 不如让学生快速制作满足场景的系统原型那么重要。

我本质上是一名 C# 开发人员,但学生们只有在进入该主题时才熟悉 Java。

【问题讨论】:

标签: database architecture orm


【解决方案1】:

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

诚然,我不熟悉 Java 世界,因为它与实际的企业开发相关,但我意识到(有点不情愿地)它是教育系统中的环境。虽然我认为学生应该接触 .NET,但这是另一个论点;)无论如何,我很确定那里有某种框架可以满足这一点。

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

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

【讨论】:

  • “先学走路再跑”好。首先,学习“手动”将对象和类从代码转换为 SQL,然后,学生理解该过程,使用 ORM 自动完成,但只能在以后。
【解决方案2】:

作为一个热心拥抱 OO 而勉强接受 RDBMS 的人……我会鼓励甚至恳求计算机科学部门将关系数据库的理论和实践放在首位。如果即使您对 OO 类使用 ORM 也可以做到这一点,那就去吧。但我更希望看到大学毕业的学生理解 OO - 关系映射很难,为什么很难,这并不意味着关系模型坏了。



不是非常坏了,反正。

【讨论】:

    【解决方案3】:

    如果主要目标是让学生学习,那么我认为在这里使用 RDBMS 会是更好的方法 - 他们已经必须在应用程序端了解对象模型,因此将关系结构调和到整体架构组合中是一项重要的技能。

    关于提供诸如 Hibernate 之类的 ORM,我真的不同意这对学生来说是一件很重要的事情。关于 Hibernate 最好的事情之一是它的难度级别与您深入研究它的深度相关。它具有非常低的进入门槛(不到一天的 IMO)来学习基础知识,而且通常基础知识就是你所需要的——尤其是对于像原型这样的东西,这就是你所说的这个活动的目标。当然,它不需要学习到这样的程度,以至于它会在课程范围之外与学生保持联系。基本的 Hibernate 使用可能是一种一次性技能。

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

    【讨论】:

      【解决方案4】:

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

      从架构和扩展的角度来看,它是相当先进的:查看例如this post 关于它的查询优化技术。

      【讨论】:

        【解决方案5】:

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

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

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

        更不用说,它让他们很好地了解了如何使用最新的 .NET 技术来做一些非常先进的事情而无需太多努力(从长远来看,这可能对他们更有利)。

        祝你好运!

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-06-25
          • 1970-01-01
          • 2010-10-19
          • 2016-12-24
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多