`
jlaky
  • 浏览: 41984 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

继承和数据库设计

阅读更多

OOP中我们经常会遇到继承的问题,在面向对象的语言中表示继承是很简单的。比如Java、Ruby。

但是如果我们需要每个类对应关系数据库的表结构也能够反映出继承关系呢?

 

假设有一个公司员工俱乐部系统,有足球俱乐部、篮球俱乐部、读书俱乐部,我们已经有如下类结构

 

class Club {

   String name;

   Time createTime;   

}

 

class SportsClub extends Club {

   Integer teamSize;

}

 

class FootballClub extends SportsClub {

  Integer footballQuantity;

}

 

class BasketballClub extends SportsClub {

  Integer basketballQuantity;

}

 

class ReaderClub extends Club {

   Integer bookQuantity;

}

 

这种结构的数据需要存储,那么有几种策略:

1 用单表继承结构存储:

clubs

(

name

team_size

footboall_quantity

basketball_quantity

book_quantity

create_time

)

 

这种方法最大的好处在于将所有关系都放在一个表,表修改简单并且不需要表连接。

坏处在于浪费空间,留下了很多空字段,当然大部分数据库的压缩算法节省了空间,并且如果数据量大,那么访问此表成为瓶颈。这个例子中footboall_quantity、basketball_quantity和book_quantity 中只有一个字段是有数据的。

 

2 用实际对象的具体结构存储:

football_clubs

(

name

create_time

team_size

footboall_quantity

)

 

 

basketball_clubs

(

name

create_time

team_size

basketball_quantity

)

 

book_clubs

(

name

create_time

book_quantity

)

 

这个方法也不需要表连接,能够从一个表就得到整个对象所有字段数据,相对于第一个方法而言避免了浪费空间。

但是这个策略的缺点就是如果父类结构发生了变化,那么所有子类都需要进行同样的变化,如果继承关系修改了,修改可能更为复杂。所以如果逻辑关系稳定的类比较适合用这种方法。

 

3 每个数据库表存储一个层次

clubs

(

name

create_time

)

 

sports_clubs

(

team_size

)

 

football_clubs

(

football_quantity

)

 

basketball_clubs

(

basketball_quantity

)

 

reader_clubs

(

book_quantity

)

 

这种表结构是最直接反映类结构的策略,存储空间占用最少,相对并且容易修改层次结构。

但是它需要读多张表来获取单独的一个数据,如果需要增加一个数据,也需要操作多张表。

 

这些策略都是访问速度和数据重复的折中。并没有谁好谁坏,实际应用中应该根据具体的应用来采用不同的策略。

 

 

1
0
分享到:
评论

相关推荐

    需求分析+概要设计+详细设计+数据库设计模板完整版(共55页).doc

    也应该说明高层次需求是否可以被其所有细化的需求所继承,或者每个需求陈述是否都有其自己的优先级。 1.4 预期读者和阅读建议 列举本软件产品需求分析报告所针对的各种不同的预期读者,例如,可能包括:

    Informix 数据库设计和实现指南

    Informix 数据库设计和实现指南

    数据库设计模式.pdf

    数据库设计模式 数据库设计模式 ⼀、主扩展模式 主扩展模式,通常⽤来将⼏个相似的对象的共有属性抽取出来,形成⼀个"公共属性表";其余属性则分别形成"专有属性表",且"公共属性 表"与"专有属性表"都是"⼀对⼀"的...

    数据库设计(分表)-不考虑模块继承版(1).doc

    数据库设计(分表)-不考虑模块继承版(1).doc

    数据库设计各阶段.doc

    1.数据库应用系统的设计步骤 按规范设计的方法可将数据库设计分为以下六个阶段 (1)需求分析; (2)概念结构设计; (3)逻辑结构设计; (4)数据库物理设计; (5)数据库实施; (6)数据库运行和维护。 2.需求分析 ...

    数据库设计中英文术语表.doc

    在数据库设计中,可以从表示 属性开始底层设计,然后将这些属性组合在一起构成代表实体和关系的表。 12. Business rules(业务规则):由用户或数据库的管理者指定的附加规则。 13. Candidate key(候选键,ER关系...

    数据库的几种设计模式

    主扩展模式,通常用来将几个相似的对象的共有属性抽取出来,形成一个“公共属性表”;其余属性则分别形成“专有属性表”,且“公共属性表”与“专有属性表”都是“一对一”的关系

    网络在线考试系统的数据库设计.doc

    网络在线考试系统的数据库设计 为了建立一个新型的、安全可靠的网络在线考试系统,数据的安全性和完整性应有较 高的要求。该文介绍了在线考试系统数据库的概念设计、物理结构设计、逻辑结构、数 据库连接池技术,...

    数据库原理与系统开发教程PPT数据库系统概述-数据库设计(2).pdf

    概念结构设计是整个数据库设计的关键 2021年5月24日 4 概念结构(续) 现实世界 机器世界 信息世界 需求分析 概念结构设计 2021年5月24日 5 概念结构(续) v 概念结构设计的特点 (1)能真实、充分地反映现实世界,...

    数据库系统概论【史嘉权】

    数据库语言SQL(包括最新标准 SQL2和SQL3)及其系统环境、关系数据库设计理论及数据库设计、面向对象的对象定义语言和对象查询语言、以及查询优化和并发控制。 本书以关系数据库为基础,以数据库的设计与编程为重点...

    mysql设计的步骤-数据库设计步骤.pdf

    mysql设计的步骤_数据库设计步骤 ⽬录 总体设计过程 数据库设计步骤: 设计描述: 数据库设计不同阶段形成的数据库各级模式: 数据库设计的特点: 需求分析 分析和表达⽤户需求: ⾸先把任何⼀个系统都抽象为: 分解处理...

    Java实验8 数据库.doc

    本专栏主要为Java程序设计(基础)实验报告和Java程序设计(进阶)实验报告,基础篇有JAVA环境搭建、Java语言基础、方法和数组、面向对象基础、Java常用类、继承与接口、成员访问控制与异常、JavaFX程序设计、Java...

    关于计算机数据库系统设计方案.doc

    传统的关系型数据库不能满足数据库设计的层次性和设计对象多 样性的需求,关系型数据库中的二维表不能描述复杂的数据关系和数据类型,而面向对 象技术中的对象可以描述复杂的数据关系和数据类型。 1.3 支持分布式...

    数据库系统导论(第七版)

    13.5 基于E/R模型的数据库设计 313 13.6 简单分析 317 13.7 小结 319 练习 320 参考文献和简介 321 第四部分 事务管理 第14章 恢复 333 14.1 引言 333 14.2 事务 334 14.3 事务恢复 335 14.4 系统恢复 337 14.5 介质...

    数据库设计约定.pdf

    数据库设计约定 ⼀、公共部分 ⼀、公共部分 1、存储引擎 、存储引擎 默认Innodb,⾮特殊要求⼀律使⽤此引擎 2、字符集 、字符集 Database Server 字符集统⼀默认UTF-8,table和column从server继承 ⼆、表设计约定 ⼆...

    树形结构的数据库表Schema设计1

    一、基本数据 本文列举了一个食品族谱的例子进行讲解,通过类别、颜色和品种组织食品,树形结构图如下:二、继承关系驱动的Schema设计 对树形结构最直

    数据库应用系统的设计.doc

    数据库应用系统的设计步骤 按规范设计的方法可将数据库设计分为以下六个阶段 (1)需求分析; (2)概念结构设计; (3)逻辑结构设计; (4)数据库物理设计; (5)数据库实施; (6)数据库运行和维护。 2.需求分析 ...

    数据库工程 CH5 继承

    继承是面向对象编程的重要特性。 继承基于这样的编程思 想:既可以在程序设计中最大限度利用已有的设计成果,又可以 在此基础上使程序设计具有高度的灵活性,使已有的程序设计成 果具有可扩充性。

Global site tag (gtag.js) - Google Analytics