面向对象的编程和数据库管理

时间:2013-01-24 10:08:10

标签: database class ooad

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

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

在此先感谢我感谢任何回复,我确实尝试了谷歌和提供的类似问题。

3 个答案:

答案 0 :(得分:2)

好像你正在反对Object Relational Impedence Mismatch

  

类图本质上是数据库设计吗?

不,不是,数据库模型和您的OO模型可能非常不同。

  

我们仍然可以像使用SQL一样使用SQL查询数据库   关系数据库?

是的,你可以,但你会将数据更改为对象,请参阅Repository Pattern如何做到这一点。

  

如何存储数据文件以及采用何种格式?

RDBS几十年来一直存储数据的方式和格式相同,我建议你看看NoSQL系统越来越受欢迎,我不会浑身泥泞。

  

类是否等同于表及其等效的属性   到列?

不一定,您将把表中的数据映射到OO设计中的对象。有时他们可能几乎直接映射。例如,您可能还将3个表中的数据映射到一个对象。

答案 1 :(得分: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;
}

使用这些实体, 将使用hibernate生成Two database tables。默认情况下,

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

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

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

答案 2 :(得分:0)

我已经读了很多年了。我喜欢OOP方法,我也开发了数据库驱动的应用程序。 以下是我的发现:

  1. OOP和数据模型在某种意义上是两个独立的世界。这是因为在采用OOP之前,RDBMS已存在多年。

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

  3. 如果你花时间构建为表建模的类,那很好,但这会增加应用程序的性能开销并增加开发时间。

  4. 我对.Net开发者的建议: 使用System.Data命名空间下已由.Net框架提供的类。熟悉这些类可以将代码的大小减少到最小。 只在必要时才创建一些自定义类