面向对象编程和SQL数据库

3

在使用SQL数据库后端编写面向对象程序时,对象的属性是否与表中的行相对应?还是更多的关系?我不太明白对象的属性如何与表中的数据相关联。 谢谢您的帮助。

5个回答

8

这主要取决于您使用的ORM,然而,总的来说其思路是:

class = > table
instance => row
attribute => column

6

ennuikiller提到了一些事情,但是一个对象可能被存储在多个行和表中,因为数据的建模和规范化可能没有相关性。

这并不是一件简单的事情... 需要一些阅读材料:对象关系阻抗不匹配(维基百科)


谢谢 gbn,我忘了提到数据模型的复杂性。 - ennuikiller
我试图阅读那篇文章(实际上在我发出这个问题之前),但我无法理解它。有人可以总结一下吗,或者有没有简单的例子可以说明它? - ChrisC

2

了解一下对象关系映射

一种编程技术,用于在关系型数据库和面向对象编程语言之间转换不兼容的类型系统。这实际上创建了一个可以从编程语言内部使用的“虚拟对象数据库”。有免费和商业版本的ORM工具可用,尽管一些程序员选择创建自己的ORM工具。

对于Java.NETHibernate项目提供关系持久化。

Hibernate是一个功能强大、高性能的对象/关系持久化和查询服务。Hibernate让您可以按照面向对象的惯例开发持久化类——包括关联、继承、多态、组合和集合。Hibernate允许您使用其自己的便携式SQL扩展(HQL)以及本机SQL或面向对象的Criteria和Example API表达查询。

与许多其他持久化解决方案不同,Hibernate不会向您隐藏SQL的功能,保证您在关系技术和知识上的投资始终有效。


2
我的答案是否定的。
面向对象设计的目标是优化程序行为的规范易于指定。 数据库设计的目标是优化数据存储/检索的易用性。这些目标非常不同,可能会导致问题域的非常不同的分解。
可以将一个映射到另一个,但是你会遇到阻抗失配,如其他人所提到的,这基本上是两个模型不同目标的技术后果。
Jorg在评论中提到了“计算机科学的越南战争”文章,值得一读。如果时间不够,您可以跳过有关越南的历史内容。

一个带有 SQL 后端的面向对象程序不是很常见吗? - ChrisC
1
是的,没错。事实上,出现大量问题也很常见。事实上,对象关系映射被广泛称为计算机科学的“越南战争”,因为我们已经在这场战争中奋斗了几十年,而且看不到结束的迹象。 - Jörg W Mittag

0

你需要更具体地说明问题,并可能在所选平台上进行一些研究。虽然有各种将不同面向对象语言映射到数据库的方法,但并没有“一刀切”的方法。


你能提供一个“积极”的(“这样做”)例子吗?你的回答有点“消极”。 - S.Lott
目前还没有人解决这个问题。业内一些最聪明的人已经尝试过,但都失败了。否定的答案是唯一真诚的答案。你可以说“只需使用Hibernate,一切都会很好”,但事实并非如此,你会在撒谎。 - Jörg W Mittag
@Jörg W Mittag:有些人非常成功,他们做了什么才有效果?对于所有软件架构问题,“没有一种大小适合所有”的说法总是正确的。然而,一些提示关于什么更好、更少风险或更有帮助可能比重复显而易见的“没有一种大小适合所有”更有用。 - S.Lott
@S.Lott,这不太公平,我提供了一个“做这个”的例子:修正问题!问题非常具体,要求针对每种可能的技术(其中有很多)提供非常具体的答案,但问题却过于宽泛。唯一可能的答案是“去学习面向对象编程和数据库,也许阅读一些ORM方面的内容”,但那是对一个完全不同的问题的回答,而不是被问到的问题。 - Adam Batkin

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