Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
面向对象程序与SQL数据库_Sql_Oop - Fatal编程技术网

面向对象程序与SQL数据库

面向对象程序与SQL数据库,sql,oop,Sql,Oop,当使用SQL数据库后端编程OO程序时,对象的属性是否与表中的行相对应?或者更多?我不太明白对象的属性如何与表中的数据相关。 感谢您的帮助。这实际上取决于您使用的是哪种orm,但一般来说,您的想法是: class = > table instance => row attribute => column 您需要更加具体,并可能对所选平台上可用的内容进行一些研究。虽然有多种方法可以将各种面向对象的语言映射到数据库,但没有“一刀切”的方法。ennuikiller提到了一些事情,但是

当使用SQL数据库后端编程OO程序时,对象的属性是否与表中的行相对应?或者更多?我不太明白对象的属性如何与表中的数据相关。
感谢您的帮助。

这实际上取决于您使用的是哪种orm,但一般来说,您的想法是:

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

您需要更加具体,并可能对所选平台上可用的内容进行一些研究。虽然有多种方法可以将各种面向对象的语言映射到数据库,但没有“一刀切”的方法。

ennuikiller提到了一些事情,但是一个对象也可能存储在多个行和表上,因为数据建模和标准化的方式可能导致不相关

这并不简单。。。一些阅读(维基百科)

读一些关于

一种编程技术,用于在关系数据库和面向对象编程语言中的不兼容类型系统之间转换数据。这实际上创建了一个“虚拟对象数据库”,可以在编程语言中使用。虽然有些程序员选择创建自己的ORM工具,但可以使用免费和商业软件包来执行对象关系映射

对于
Java
.NET
,项目提供关系持久性

Hibernate是一个功能强大、高性能的对象/关系持久性和查询服务。Hibernate允许您按照面向对象的习惯用法开发持久类,包括关联、继承、多态性、组合和集合。Hibernate允许您用它自己的可移植SQL扩展(HQL)以及本机SQL或面向对象的标准和示例API来表达查询

与许多其他持久性解决方案不同,Hibernate不会向您隐藏SQL的威力,并保证您在关系技术和知识方面的投资一如既往地有效

我的答案是否定的

OO设计的目标是优化以便于指定程序行为。 数据库设计的目标是优化数据存储/检索的便利性。这些目标是非常不同的,可以并且将导致问题领域的非常不同的分解

可以将一个映射到另一个,但随后会遇到阻抗不匹配,正如其他人所提到的,这基本上是两个模型不同目标的技术结果


Jorg在评论中提到了“”这篇文章,值得一读。如果时间不够的话,你可以跳过关于越南的历史资料。

谢谢gbn,我忘了提到数据模型的复杂性。我试着读了那篇文章(实际上是在我发布这个问题之前),但我没能理解。有人能总结一下吗?或者有一个简单的例子来说明吗?你能提供一个“积极的”(“这样做”)的例子吗?你的答案有点“否定”。还没有人知道。业内一些最聪明的人尝试过,但失败了。否定的回答是唯一真诚的回答。你可以说“只要使用Hibernate,一切都会好的”,但它不会,你会撒谎。@Jörg W Mittag:有些人非常成功,他们做什么工作才有效?对于所有的软件架构问题,“没有一个尺寸适合所有人”总是正确的。然而,一些关于什么更好、风险更低或更有用的提示可能比重复显而易见的“没有一刀切”更有用。@S.Lott这真的不公平,我提供了一个“做这个”的例子:解决问题!这个问题非常具体,它要求对每一种可能的技术(其中有许多技术)给出一个非常具体的答案,但这个问题过于宽泛。唯一可能的答案是“去学习OOP和数据库,也许读一些ORM”,但这是一个完全不同的问题的答案,没有被问到。有一个带有SQL后端的OO程序不是有点常见吗?是的,是的。出现大量问题也是很常见的。事实上,对象关系映射被广泛称为“计算机科学的越南”,因为我们已经在这场战争中打了几十年,看不到尽头。