2013-01-24 40 views
2

我一直对此感到困惑。我的问题是,面向对象编程和数据库管理如何协同工作?我似乎无法找到很多关于这两者如何一起工作。我想制作一个数据库驱动的应用程序,而且我目前有一本关于面向对象编程的书,它有一个使用面向对象方法创建应用程序的过程,但是当我们开始涉及数据库时,我会感到困惑。面向对象程序设计和数据库管理

本质上是一个类图是一个数据库设计?我们仍然可以像使用关系数据库一样使用SQL查询数据库吗?数据文件如何存储以及格式如何?类是否等同于表及其属性等价于列?

在此先感谢,我很欣赏任何回复,并且我尝试了谷歌和提供的类似问题。

回答

2

看起来好像你正在对Object Relational Impedence Mismatch来临。

是一类图基本上是一个数据库设计?

不,它不是,数据库模型和你的OO模型可能会有很大的不同。

我们是否仍然可以用SQL查询数据库,就像我们用 关系数据库一样?

是的,你可以,但你会改变数据到对象,看到​​如何做到这一点。

数据文件如何存储和以什么格式?

相同的方式和格式RDBSs已经存储了数十年的数据,我不会建议你看看NoSQL系统的日益普及。

是否将类等同于表及其属性相当于将列 ?

不一定,您会将表中的数据映射到面向对象设计中的对象。有时他们可能会直接映射。例如,您也可以将3个表中的数据映射到一个对象。

+0

哈,我在写同样的中间!是的,这 - 并搜索ORM,试图解决这个问题。 – halfer

+0

谢谢你为我清理:) – MohsinG

+0

好吧,好东西。很高兴有帮助。 –

0

ORM(Object Relational Mapping) in Hibernate是你澄清一个很好的例子!

对于类似问题:Is a class diagram essentially a database design? and Are classes the equivalent to tables and their attributes equivalent to columns? ..是 让我跟你解释一个例子:在使用这些实体

class Department 
{ 
    private int departmentNo; 
    private int departmentName; 
    private Set<Student> students; 
} 

class Student 
{ 
    private int studentId; 
    private int studentName; 
    private Department department; 
} 

Two database tables将与休眠生成。默认情况下,

Department: departmentno(int),departmentname(varchar(255)) 
Student: studentid(int), studentname(varchar(255)),departmentno(int) [foreign key] 

生成。

特定部门的学生名单可通过retrived,

Department department = ......; // hibernate related thing which hit the database 
Set<Student> = department.getStudents(); 
0

我一直在阅读这一段岁月。我喜欢面向对象的方法,我也开发数据库驱动的应用程序。 这里是我的发现:

  1. OOP和数据模型在一定意义上是两个不同的世界。这是因为RDBMS在OOP被采用之前已经存在了多年。

  2. OOP侧重于类和对象; RDBMS专注于数据存储和检索。

  3. 如果您花时间建立可以建模您的表的类,那么它很好,但是这会增加应用程序的性能开销并增加开发时间。

我对于.NET开发者的建议: 使用那些已经被System.Data命名空间下的.NET Framework提供的类。熟悉这些类可以将代码的大小降至最低。 当严格需要时只创建几个自定义类