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. **业务理解与需求分析**: - 业务需求是数据库设计的基础,设计师需要深入理解业务流程,确保设计出的数据库能准确反映和支撑业务运作。 - 在设计前...
为了更好地理解数据库设计的关键环节之一——元数据设计,本文将详细介绍数据库设计的基本概念、流程以及元数据设计的重要性和方法。 #### 二、数据库设计的基础知识 ##### 2.1 数据模型发展历程 - **网状与层次...
在《UML数据库设计应用》的学习资源中,可能涵盖了这些步骤的实例解析和最佳实践,帮助读者掌握UML在数据库设计中的具体应用。通过学习,开发者不仅可以提高设计效率,还能更好地沟通设计意图,降低项目风险。 此外...
数据库设计主要包括概念设计和详细设计两个阶段。概念设计阶段主要包括形成概念模型、数据库逻辑结构、命名规则、E-R图等。详细设计阶段主要包括数据库物理结构与存储方案、表描述和表的属性清单等。 PowerDesigner...
数据模型的选择直接影响数据库的设计和性能。 E-R图是数据库设计中用于表示实体、属性和实体间联系的图形工具,其中实体代表现实世界中的对象,属性描述实体的特性,而联系则是实体之间的关联。 逻辑结构设计是...
【数据库设计大作业】是一个以学生成绩管理为核心的系统,旨在通过软件自动化处理成绩录入、查询和修改等任务,以简化教师的工作流程,提升管理效率并降低成本。该系统基于Visual C++6.0的MFC(Microsoft Foundation...
9. 公路运输管理信息系统的数据库设计应遵循良好的设计规范和约定,例如命名规范、编码规则等,以保证数据库的高效运行和易于维护。 10. 公路运输管理信息系统在设计时应考虑到系统的版本管理和文档记录,包括各个...
数据库设计需考虑权限继承和权限边界,确保下级角色或组的权限不超出其直属上级。 3. **系统安全设计** - **权限控制**:通过权限资源、用户、角色和组的相互作用实现细粒度的权限控制,防止非法访问。 - **...
总的来说,这个超市管理系统完整版是一个综合性的项目,涵盖了数据库设计、C++编程和系统集成等多个方面的知识。对于参与课程设计的学生而言,这是一次宝贵的实践经验,能够提升他们的实际操作能力和问题解决能力,...
在IT行业中,权限管理和数据库设计是构建安全、高效软件系统的核心组成部分。权限管理涉及到用户角色、操作权限、访问控制等方面,而数据库设计则关乎数据的存储、查询效率以及系统的扩展性。下面将深入探讨这两个...
**数据库设计**是信息系统开发中的一个重要环节,旨在创建一个能够高效、可靠地存储和管理数据的数据库系统。它包括了从用户需求分析到最终实现的一系列步骤。一个好的数据库设计不仅能满足当前的需求,还应具有良好...
在ODL中,数据库设计是至关重要的,因为它存储了整个系统的状态和配置信息,直接影响到系统的性能和稳定性。 本PPT重点讲解了从对象导向分析(OOA)到实体关系(ER)模型的转换过程,这是数据库设计中的关键步骤。...
数据库设计的输出包括数据库系统的总目标、概念设计、逻辑设计、物理设计和实现计划等。 ER模型的实例分析是数据库设计中的一种重要步骤。ER模型可以帮助设计师更好地设计数据库结构,使得数据库系统更加灵活和可...
在本课程设计中,我们将深入探讨如何使用C#编程语言与SQL数据库进行集成,从而创建高效、实用的应用程序。这个“c#SQL数据库课程设计整合版”覆盖了多个实际应用场景,包括学生信息管理系统、企业人事管理系统、库存...
### 数据库设计漫谈——...一个好的数据库设计需要设计师具备深厚的专业知识,同时也需要他们具有良好的判断力和创造力。希望通过这篇文章,读者能够对数据库设计有一个更加全面的认识,并在实际工作中应用这些知识。
这个系统不仅展示了数据库的基本概念,如实体关系模型、表的设计和规范化,还体现了面向对象编程的原理,如类的设计、对象的封装和继承等。 首先,让我们深入了解一下Java在系统中的应用。Java是一种广泛使用的编程...
2. **PowerDesigner工具**:PowerDesigner是一款强大的数据库设计和建模工具,具有图形化界面,能支持UML和Sybase数据库设计。它包含CDM、OOM和PDM三种模型,可以互相转换,便于数据库的创建和维护。 - **CDM...
在Android开发中,数据库是存储和管理应用程序数据的关键组件,而设计模式则是软件工程中解决常见问题的最佳实践。本文将深入探讨Android数据库的使用以及在Android开发中如何应用设计模式。 首先,Android主要使用...
标题“数据库设计 Step by Step”及描述中隐含了多个...同时,文中提到的读者群体,包括数据库设计师、应用架构师、软件工程师、数据库管理员(DBA)和软件测试工程师等,显示了数据库设计知识的广泛适用性和跨学科性。