【问题标题】:Object-oriented programming and database management面向对象的编程和数据库管理
【发布时间】:2013-01-08 01:12:59
【问题描述】:

我已经对此感到困惑了一段时间。我的问题是,面向对象编程和数据库管理如何协同工作?我似乎找不到太多关于两者如何协同工作的信息。我想制作一个数据库驱动的应用程序,我目前有一本关于面向对象编程的好书,其中包含使用面向对象方法创建应用程序的过程,但是当我们开始涉及数据库时我只是感到困惑。

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

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

【问题讨论】:

    标签: database class ooad


    【解决方案1】:

    看来你要对付Object Relational Impedence Mismatch

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

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

    我们还能像使用 SQL 那样查询数据库吗? 关系数据库?

    是的,您可以,但您会将数据更改为对象,请参阅Repository Pattern 了解如何执行此操作。

    数据文件是如何存储的,采用什么格式?

    几十年来,RDBS 存储数据的方式和格式相同,我不会建议您看看日益流行的NoSQL 系统。

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

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

    【讨论】:

    • 哈,我正在写同样的东西!是的,这 - 并搜索试图解决这个问题的 ORM。
    【解决方案2】:

    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]
    

    已生成。

    可以通过以下方式检索特定部门的学生列表,

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

    【讨论】:

      【解决方案3】:

      我已经读了好几年了。我喜欢 OOP 方法,而且我还开发数据库驱动的应用程序。 以下是我的发现:

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

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

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

      我对 .Net 开发人员的建议: 使用 System.Data 命名空间下的 .Net 框架已经提供的类。对这些类的深入了解可以将代码的大小降至最低。 仅在绝对必要时创建一些自定义类

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-07-08
        • 2010-10-03
        • 2017-05-26
        • 1970-01-01
        • 2020-05-18
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多