对象继承结构到设计数据表方式谈

引言

面向对象的三个特征: 封装(encapsulation), 继承(inheritance), 多态(polymorphic), 其中继承是我们三个特征中最重要的应该就是继承了.

我们在程序中可以很自然, 很方便的表达继承的关系. 但是针对这样的继承关系, 我们如何设计数据库呢?通常我们有三种方式:

1. 一个继承树映射到一个表(one inheritance tree mapping to one table)

这种方式是将拥有共同父类的所有的类都看做成一张表(包括父类), 然后所有的类的所有的属性取并集, 组成数据表的所有列.

如上图类的结构图, Vehicle是父类, 拥有两个属性Engine和wheel, 而子类Truck有属性Container, 子类Car有属性Acoustics.

数据表被映射成

类属性 数据表字段
Engine Engine
Wheel Wheel
Container Contianer
Acoustics Acoustics

优点: 结构简单, 在数据表操作层可以很方便的实现针对这三个对象的数据库的insert, update, delete.

缺点: 这样的设计数据表, 会有大量的数据冗余.

时间: 2024-12-22 13:55:12

对象继承结构到设计数据表方式谈的相关文章

权限设计 数据表的问题

问题描述 原数据表设计为用户表(user)UserIdUserNameRoleID角色表(role)RoleIdRoleNameRight//这里的right字段是存权限的字符串,例如该角色拥有权限ID:01,02,03,这里的RIGHT字段值就为|01|02|03|权限表(right)RightIDName可别人说这样不好,权限表和角色表的关联不行,如果权限表删除,角色表不能及时的反应过来,现求教有没有好的设计方法,或者解决方法啊 解决方案 解决方案二:根据需求,有些C/S的程序,将权限细化到

java web ssh2框架 对象和数据表问题

问题描述 java web ssh2框架 对象和数据表问题 ssh2有几个对象肯定有几个数据表.但是难道每个数据表都要生成一个对象吗?还有dao service层,这个该怎么处理啊. 解决方案 一般都是一张表对应一个实体类对象,不过有的中间关联表你也可以不创建实体类对象, 可以通过sql进行控制 解决方案二: 一般是实体类对应一张表,虽然现在大部分都是先建表在设实体类,但是也有是先成实体类然后自动生成表的.至于dao和service层不清楚你说的具体是什么问题 解决方案三: SSH框架+Orac

mysql中创建修改删除数据表例子

在PHP中应用数据库时,通常是先在MySQL客户机的控制台中,使用DDL语句创建网站中的数据库.数据表及修改表结构等操作以后,再在PHP脚本中应用.很少直接在PHP中执行DDL语句动态创建数据库.数据表或修改表的操作,通常也只有在制作安装版本的网站时才会这么做. 1.创建表(CREATE TABLE) 数据库创建以后,使用use命令选定这个新创建的数据库作为默认(当前)数据库使用,就可以继续建立其包含的数据表.数据表的创建是使用表的前提,创建数据表主要是定义数据表的结构,包括数据表的名称.字段名

数据表设计-数据库设计:数据表的对象的属性

问题描述 数据库设计:数据表的对象的属性 问题比较简单, 在某个地区有A1.B.C.D.E等区域District,每个区域中又分几个小区域Region(如东西南北),在程序设计中,每个Region中都有两个属性(一个是工作完成的日期,一个是此Region所属的District),然后此Region中就是它每一天所对应的工作数据, 另一方面,每个District对象中也有一些属性值,这此"属性"下都只有一个值. 我想问一下,这样的结构应该怎样来设计数据库? District和Region

详解Java的Struts2框架的结构及其数据转移方式_java

Struts2的结构 1.为什么要使用框架? (1)框架自动完成了很多琐屑的任务 对于Struts2来说,它帮助我们方便地完成了数据类型转换.数据验证.国际化等等 Web开发中常见的任务.还有Spring中大量使用的Template模式,都是在让我们的开发 过程更加自动化.智能化.使用框架就是避免重新发明轮子,重新复制这些模板代码. 框架让我们将精力更多地放在更高级别的问题上,而不是常见工作流和基础任务上. (2)使用框架就是优雅地继承了框架背后的架构 框架背后的架构通常定义了一系列的工作流程,

针对复杂的多级栏目该如何设计数据库表结构?

问题描述 针对复杂的多级栏目该如何设计数据库表结构? 比如可能存在如下几种情况: 主栏目1-->子栏目2-->子栏目3-->内容列表-->内容 主栏目2-->子栏目2-->内容列表-->内容 主栏目3-->内容列表-->内容 如果说为了开发和后期维护的方便,以及后期新的内容添加或删除方便,栏目表应该如何设计比较符合规范? 比如栏目按照一定规则拼接放到一个字段里: 主栏目1|子栏目11|子栏目111 主栏目2|子栏目21|子栏目212|子栏目2121 或

这样做才能设计出更好的数据表

本文讲的是这样做才能设计出更好的数据表, **差强人意的表格.**他们哪里没有做对? 由于一些历史原因,表格在成为网页的必须品之后,因为有更加新潮,更加时髦的布局,它被很多设计师弃用.但是现如今,他们没法在网页上再创造出更多的外观,而数据表格仍然可以用于收集和组织很多我们日常生活中使用的信息. 例如,我认为所有表格的起源是:美国的 "Harmonized Tariff 的计划表",一个包含有 3,550 页的表格,它罗列了每一样可以被进口入美国的货物清单,包含有些令人兴奋的货物,例如,

【原创】C#搭建足球赛事资料库与预测平台(6) 赔率数据表设计2

        本博客所有文章分类的总目录:[总目录]本博客博文总目录-实时更新 开源C#彩票数据资料库系列文章总目录:[目录]C#搭建足球赛事资料库与预测平台与彩票数据分析目录 本篇文章开始将逐步介绍使用C#搭建足球赛事资料库与预测平台的相关细节.还是先从数据库开始,从本文开始将逐步对每个核心实体类和数据库设计相关的内容进行讲解,并公布源代码,至于能不能跑起来,看的看个人努力.由于没有时间将所有相关业务都简述清楚,所以也只好将需求和表设计一起进行.本人也是走了很多弯路的.考虑到系统数据表很多,

【原创】C#搭建足球赛事资料库与预测平台(5) 赔率数据表设计1

        本博客所有文章分类的总目录:http://www.cnblogs.com/asxinyu/p/4288836.html  开源C#彩票数据资料库系列文章总目录:http://www.cnblogs.com/asxinyu/p/4329642.html  本篇文章开始将逐步介绍使用C#搭建足球赛事资料库与预测平台的相关细节.还是先从数据库开始,从本文开始将逐步对每个核心实体类和数据库设计相关的内容进行讲解,并公布源代码,至于能不能跑起来,看的看个人努力.由于没有时间将所有相关业务都