我一直对此感到困惑。我的问题是,面向对象的编程和数据库管理如何协同工作?我似乎无法找到两者如何协同工作。我想创建一个数据库驱动的应用程序,我目前有一本关于面向对象编程的好书,它有一个使用面向对象方法创建应用程序的过程,但是当我们开始涉及数据库时,我感到很困惑。
类图本质上是数据库设计吗?我们仍然可以像使用关系数据库一样使用SQL查询数据库吗?如何存储数据文件以及采用何种格式?类是否等同于表及其属性等同于列?
在此先感谢我感谢任何回复,我确实尝试了谷歌和提供的类似问题。
答案 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方法,我也开发了数据库驱动的应用程序。 以下是我的发现:
OOP和数据模型在某种意义上是两个独立的世界。这是因为在采用OOP之前,RDBMS已存在多年。
OOP专注于类和对象; RDBMS专注于数据存储和检索。
如果你花时间构建为表建模的类,那很好,但这会增加应用程序的性能开销并增加开发时间。
我对.Net开发者的建议: 使用System.Data命名空间下已由.Net框架提供的类。熟悉这些类可以将代码的大小减少到最小。 只在必要时才创建一些自定义类