OO程序和SQL数据库

时间:2009-07-19 13:14:16

标签: sql oop

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

5 个答案:

答案 0 :(得分:7)

这实际上取决于你使用的是哪个,但总的来说,这个想法是:

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

答案 1 :(得分:6)

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

这不是直截了当的......有些阅读Object-relational impedance mismatch(维基百科)

答案 2 :(得分:2)

了解Object-relational_mapping

  

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

对于Java.NEThibernate项目提供了关系持久性。

  

Hibernate是一种功能强大的高性能对象/关系持久性和查询服务。 Hibernate允许您按照面向对象的习惯用法开发持久化类 - 包括关联,继承,多态,组合和集合。 Hibernate允许您在自己的可移植SQL扩展(HQL),本机SQL或面向对象的Criteria和Example API中表达查询。

     

与许多其他持久性解决方案不同,Hibernate不会隐藏SQL的强大功能,并保证您对关系技术和知识的投资与往常一样有效。

答案 3 :(得分:2)

我的回答是否定的。

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

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

Jorg在评论中提到了“Vietnam of computer science”文章,值得一读。如果你的时间不够,你可以跳过越南的历史性东西。

答案 4 :(得分:0)

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