`
xly_971223
  • 浏览: 1283228 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

用面向对象思想设计数据库

阅读更多
对于开发者来说 由于数据结构的变化导致程序的修改无疑是让人头疼的 。尤其是那些频繁的修改 今天加一个字段 明天又加一个字段, 大量的时间都浪费在修改这些无关紧要的工作上了。

好了,言归正传  先看下面一个小例子

//商品类
public class Product{
     private long productId;
     private String category;
     private String productCode;
     private String productName;
}

//推荐商品类 ,如推荐到首页
public class RecommendProduct{
    private String recommend_username;
    private String recommend_date;
    private Product product;
}

一般我们的设计就是这样
通过查询返回一个List<RecommendProduct>到首页, 操作完成

如果想下面这样设计就不太合理,而且也打破了类设计的原则----功能单一性
//商品类
public class Product{
     private long productId;
     private String category;
     private String productCode;
     private String productName;

    //新添加字段
     private String recommend_flag;//是否被推荐
     private String recommend_username;
     private String recommend_date;
}


好了 现在把这个设计照搬到数据的设计上
如果将product和recommendProduct设计在一张表中如下
Product表
product_id   number(12)
category     varchar2(16)
productCode  varchar2(16)
productName  varchar2(32)
recommend_flag char(1) //推荐标志位
一开始可能是这样
如果我要推荐到10个二级域名的首页怎么办?要加10个标志字段吗?显然这样做不行

采用面向对象的思想设计如下
Product表(只包含产品相关信息的字段)
product_id   number(12)
category     varchar2(16)
productCode  varchar2(16)
productName  varchar2(32)

RecommendProduct表(作为单独表 而不是一个标志为)
recommend_id (PK)
product_id (Fk)
recommend_username
recommend_date

这样做的另外一个好处是:两个表的变化是独立的 可以在RecommendProduct表中添加字段而不会影响到product表 如果设计在一起的话就会出现开头说的问题 今天加一个字段明天加一个字段情况

借鉴了一些面向对象设计的开闭原则

分享到:
评论
4 楼 ahuaxuan 2007-02-13  
aninfeel 写道
看他们的设计真是吓人啊,表的字段多得让人直冒汗,还有许多在功能上是重复的。

这还叫老鸟啊,许多在功能上是重复的就没有必要了吧,一般来说以前的程序员在使用事务脚本编程的时候确实会把表的字段搞的很多,但是人家并不是面向对象编程,所以问题不大,但是在设计的时候搞出很多冗余来就不应该了吧,可能那些所谓的老鸟还是喜欢事务脚本,而不是oo
3 楼 rtdb 2007-02-13  
aninfeel 写道
非常认同,但是我们公司的两个老鸟总是说我设计的数据库表太多,字段太少。看他们的设计真是吓人啊,表的字段多得让人直冒汗,还有许多在功能上是重复的。
你就不考虑查询效率了?!
难道不考虑两个过万的表JOIN是灾难性的?
2 楼 aninfeel 2007-02-12  
非常认同,但是我们公司的两个老鸟总是说我设计的数据库表太多,字段太少。看他们的设计真是吓人啊,表的字段多得让人直冒汗,还有许多在功能上是重复的。
1 楼 akun_007 2007-02-12  
的确,反复的对数据库中的字段进行增加和修改是个头疼的问题,经常导致修改代码。运用面向对象的思想对数据库进行设计和改动还是十分不错的。

相关推荐

    面向对象的关系数据库设计

    面向对象的关系数据库设计是一种结合了面向对象编程思想和传统关系数据库管理系统(RDBMS)的设计方法。这种方法允许开发者使用面向对象的概念来定义和组织数据,从而更好地适应复杂的应用场景。 首先,我们要区分...

    面向对象数据库-对象型关系数据库-oracle

    面向对象数据库技术是一种将传统的数据库管理系统与面向对象编程思想相结合的新型数据库技术,它旨在解决复杂数据类型管理和软件开发效率的问题。在80年代以后,随着应用需求的多样化,数据库技术开始引入面向对象的...

    面向对象的压铸数据库系统建模

    面向对象的压铸数据库系统建模是指借助面向对象思想来建立的关系型数据库管理系统(OODBMS)。这种系统可以将数据库中的每个描述实体都作为一个对象(Object),每个对象是唯一可标识的,并且对象是由描述实体所包含...

    面向对象的压铸数据库系统建模.docx

    面向对象的压铸数据库系统是一种基于面向对象思想的关系型数据库管理系统(Object-Oriented Database Management System, OODBMS)。该系统的核心理念是将压铸过程中的各种实体(如压铸合金、浇注系统、型腔镶块等)...

    《C#面向对象程序设计》源代码(CS)

    本书以面向对象的软件工程思想为主线,细致深入地讲解了C#语言面向对象程序设计的方法和技巧,内容涵盖面向对象的基本概念、基于接口的设计、泛型程序设计方法、Windows和Web应用开发,以及数据库访问技术。...

    面向对象编程思想

    面向对象是一种新兴的程序设计方法,或者说它是一种新的程序设计范型,其基本思想是使用对象、类、继承、封装、消息等基本概念来进行程序设计。它是从现实世界中客观存在的事物(即对象)出发来构造软件系统,并在...

    妙解Hibernate 3.x:叩响面向对象思想之门 PDF

    《妙解Hibernate 3.x:叩响面向对象思想之门》是一本深入解析Hibernate框架的专著,旨在帮助读者理解并掌握面向对象编程思想在实际开发中的应用,尤其是在使用Hibernate时如何有效地进行数据持久化。这本书是面向...

    面向对象程序设计图书管理系统

    4. 培养学生掌握使用面向对象程序设计语言Borland C++和面向对象开发平台VisualC++等。 设计要求 本系统的设计要求主要有四点: 1. 培养学生应用面向对象程序设计方法和思想解决实际问题的能力。 2. 培养学生掌握...

    C++面向对象程序设计课程设计报告.pdf

    在设计该系统时,我们采用了面向对象的设计思想,使用C++语言来实现系统的开发。我们首先对系统的需求进行了分析,然后对系统的总体方案进行了设计。接着,我们对系统的设计思路和主要步骤进行了分解,并对各个功能...

    面向对象思想 pdf

    ### 面向对象思想详解 #### 一、面向对象思想概述 面向对象(Object-Oriented, OO)思想作为一种程序设计范型,是软件工程领域的重要组成部分,它改变了传统程序设计的方式,使得软件开发更加贴近于现实世界的思维...

    采用面向对象思想实现个人所得税的计算

    面向对象思想是软件开发中的一个重要概念,它将现实世界中的事物模型化为计算机程序中的类和对象,使得代码更易于理解和维护。在这个个人所得税计算程序中,我们可以看到这种思想的具体应用。 首先,让我们理解一下...

    面向对象的压铸数据库系统建模.doc

    面向对象的压铸数据库基于面向对象思想的关系型数据库管理系统,其中每个描述实体被视为一个唯一的对象,包含一组数据和对这些数据的操作。对象可以归类到类中,类是一组具有相似性质的对象的集合。在OODBMS中,数据...

    面向对象课程设计

    面向对象课程设计主要关注的是如何运用面向对象编程思想来构建一个实用的系统,例如这里的车辆管理系统。这个系统设计旨在将传统的车辆管理工作转变为自动化、系统化和规范化的管理模式,以提高效率和经济效益。以下...

    文献检索课程设计报告(面向对象数据库研究).pdf

    他们强调概念模型设计的重要性,并提出了一种以面向对象思想为基础的设计方法,能够全面描述实际业务对象,提供统一的数据库概念模型设计。 3. **面向对象数据库关键技术** - 王功明、关永和赵春江在《微计算机...

    面向对象课程设计:学生信息管理系统

    【标题】"面向对象课程设计:学生信息管理系统"是一个典型的软件开发项目,旨在教授和实践面向对象编程技术在实际问题解决中的应用。这个系统的主要目标是管理学生的信息,包括但不限于姓名、学号、成绩等,这通常...

    基于面向对象程序设计的vb

    通过以上实验的学习,不仅能够掌握VB的基础操作,还能深入了解面向对象程序设计的思想和技术,为进一步开发复杂的应用程序打下坚实的基础。此外,实验还强调了数据库管理和多窗体设计的重要性,这些都是实际工作中...

    《Java面向对象程序设计(第2版)》课件

    第二版的《Java面向对象程序设计》课件旨在深入浅出地介绍这一关键概念,帮助学习者掌握Java语言的基础以及面向对象编程的核心思想。下面将详细阐述Java面向对象编程的基本概念、特性及其在实际开发中的应用。 1. ...

    面向对象思想的经典实例

    面向对象思想是软件开发中的核心概念之一,尤其在Java编程语言中被广泛应用。这个经典实例——英汉字典的设计,旨在帮助初学者理解面向对象的思维方式和软件分层模型的实践应用。 面向对象(Object-Oriented ...

Global site tag (gtag.js) - Google Analytics