`

主表,从表,关联表,父表,子表

阅读更多

一、前言

 

    在数据库设计中,Hibernate,iBatis等ORM框架的使用中经常听说主键,外键,主表,从表,关联表,父表,子表之类的术语,弄懂它们之前的区别与联系对于数据库设计和ORM框架的学习使用是非常有必要的。

 

 

二、概述

 

    下面从数据库设计角度,ORM框架使用(以Hibernate为例),PowerDesigner软件以及实际业务角度进行一下介绍。

 

 

 

(1) 数据库角度而言

 

    主键:一般情况下,满足第一范式的表都有一个主键Primary key,用于唯一标示数据库中的一个字段。

 

    外键:外键是相对于数据库设计中的参考完整性而言,它与主键之间是彼此依赖的关系。假设现在有两个表,产品分类表ProductCategory(主键CategoryId)和产品信息表Product(主键ProductId),每类产品都属于一个分类。那么如果产品信息表肯定需要参考产品分类表进行定义。因为如果没有产品分类表,又何谈产品分类呢。所以产品信息表Product需要引用ProductCategory中的主键CategoryId 进行产品分类定义,Product表中引用CategoryId的字段就是外键。

 

   在概念模型(Concept Model)中,从产品分类角度看,产品分类和产品之间就是一对多的关系,一个分类下可以有多个产品。从产品角度看,产品和产品分类之间是多对一的关系,多种产品属于一个分类。

 

    主表:在数据库中建立的表格即Table,其中存在主键(primary key)用于与其它表相关联,并且作为在主表中的唯一性标识。(摘自百度百科)

 

    从表:以主表的主键(primary key)值为外键 (Foreign Key)的表,可以通过外键与主表进行关联查询。从表与主表通过外键进行关联查询。(摘自百度百科)

 

   关联表:两个数据库及其(数据)表之间的数据的相互依赖和影响关系。

  比如现有某学校三个数据表:学生(学号,姓名),课程(课程名,课程编号),选课(学号,课程 号,成绩)。选课表中的“学号”,“课程号”必须是另外两个表中存在的数据,才有意义;而且一旦另外两表中的某一学生或课程被删除,选课表中的相应学号或 课程号必须自动删除。这就是一种关联关系。它实际上是保证数据完整性的一种做法.

 

 

   父表,子表的说法其实在PowerDesigner中解释可能更加恰当,这里就不多说了。

 

 

 

(2)从ORM框架来看

 

   Hibernate的主表从表请参照:

   http://www.iteye.com/problems/31280

 

   关联表: 在Hibernate的关联关系中,存在着多对多的关联,但是实际情况下,我们是很少使用多对多关联的,因为它的查询效率很低(http://zhidao.baidu.com/question/244432511.html)。

   举个例子,一个订单可以订多个产品,一个产品也可以出现在多张订单。很明显,一个多对多的关系,因为效率问题,我们必须将它分解成两个1对多的关系,所以,必须添加一个中间表,也就是关联表,用来保存两个表的主键,从而实现多对多关系的分解。

 

 

 

 

(3)PowerDesigner

 

   一个截图,足以说明一切了,多的也不用举例,上面的单词相信大家还是可以看懂的。

 

   

 

 

(4)实际业务功能

 

    关于这个业务功能,不多介绍了,从网上截取了一个不错的例子,大家可以看一下,介绍的非常不错。

 

班级:Class 学生:Student 

Class的表结构 
id int identity, 
name varchar 

Student 

id int identity, 
name varchar, 
classId int refrence Class ('id') 

    Student 中classId引用Class,一个班级中可能有多个学生,那么此时可以说Class是主表,Student是Class的从表,从hibernate的角度看,Student和Class是一个many-to-one的关系。 

    不过主表和从表是相对的,没有绝对的,比如,老师和学生的关系,一个老师有多个学生,一个学生同时也有多个老师,这时如果以老师为主表,那学生就是从表,一学生为主表,那老师就是从表。 

    如何确定主表和从表? 

    则完全取决于业务,业务上的主体就是主表,比如软件A是为老师而设计,用于管理学生的,那老师就是主表,软件B是为家长设计,用于管理老师的,那学生就是主表。主表和从表没有绝对,完全取决业务上的重心。

 

 

 

  相信看了上面的介绍,大家都这些概念也大致的所有了解了。把这些基本概念弄懂对于学习ORM框架是非常重要的。

 

 

分享到:
评论

相关推荐

    数据表的关联关系图-父表与子表的关联关系

    本话题主要讨论的是“数据表的关联关系图”,特别是父表与子表的关联关系,涉及到的核心概念包括主键、外键、父表和子表,以及多对一关联。 首先,我们来理解什么是主键和外键。主键(Primary Key)是表中的一个或...

    用MyBatis实现表的一对多关联查询

    MyBatis的一对多映射是指一个表(父表)中的多条记录可以与另一个表(子表)中的多条记录相关联。例如,一个部门(Department)可以有多个员工(Employee),这就是典型的一对多关系。 1. 配置映射文件 在MyBatis...

    主子表查询ibatis

    首先,主子表查询是数据库设计中常见的场景,通常涉及到一个“父”表(主表)和一个或多个“子”表(从表)。在iBATIS中,处理这种一对多关系的关键在于配置映射文件,确保数据能够正确关联并检索出来。 1. **...

    经典表关联与多表查询

    父表(主表)是指公共字段是主键的表,而子表(详细表)是指公共字段是外键的表。 语法结构: 多表查询的语法结构主要包括 select 子句、from 子句、where 子句、group by 子句、having 子句和 order by 子句。...

    DbGridEh关联子表的下拉功能

    3. **配置TTable或TQuery**:如果你使用的是TTable或TQuery,需要设置其DatabaseName、TableName(或SQL)以及连接属性,确保能正确访问到关联的主表和子表。 4. **设置TField的Lookup属性**:选择子表字段,将其...

    ACCESS数据库多表关联查询例程

    3. 子查询:在一个查询中嵌套另一个查询,用子查询的结果作为父查询的一部分。可以用于复杂条件的筛选或者获取多表关联的中间结果。 4. 数据透视表查询:将数据汇总并按照特定方式排列,用于数据分析。 四、易语言...

    NC主子孙表

    - **父主键编码对应子表实体的虚字段**:通过设置父子表之间的关联字段,实现数据的一致性和完整性。 ##### 3.4 XML配置文件相关设置 - **增加代理**:为了支持主子孙表查询功能,需要在XML配置文件中增加特定的...

    用友uap开发nc65向导主子表单据详细步骤

    在数据库设计中,主子表关系是指一个主表(父表)与一个或多个子表之间的一对多关联。在UI展示时,主子表单通常以表格形式展现,主表显示在上方,子表则以折叠或滚动的形式显示在下方,用户可以方便地查看和编辑相关...

    更新关联表的值

    2. **关联管理**:Hibernate提供了多种策略来管理关联,比如`CascadeType.ALL`会将操作(如保存、删除、更新)从父实体传播到子实体,`FetchType.LAZY`或`EAGER`控制关联的加载时机。 3. **对象状态**:理解...

    主明细表输入示例

    6. **LinkChildToField/MasterSource**:这两个属性或方法用于设置子表(明细表)与父表(主表)之间的关联,确保数据的同步。 7. **TDBNavigator**:这个组件提供了一组按钮,如"新建"、"编辑"、"删除"等,帮助...

    Zend Framework教程之Zend_Db_Table表关联实例详解

    4. 依赖关系的管理:使用`$_dependentTables`时要注意,删除父记录可能会导致子记录的丢失,这在某些应用场景中可能是不可接受的。 综上所述,通过本教程的介绍和实例分析,我们可以看到Zend Framework通过Zend_Db_...

    两个表 关于树的组合

    这通常需要执行两种类型的查询:一种是从父表出发,查找所有子节点(父查子);另一种是从子表出发,查找其父节点(子查父)。 1. **父查子**:在Java中,我们可以使用JOIN操作或者递归查询来实现。JOIN操作将两个...

    layui_修改了树型结构的父选项与子选项关联的问题.rar

    标题"layui_修改了树型结构的父选项与子选项关联的问题.rar"暗示了用户在使用LayUI的树形组件时遇到了一个问题,这个问题可能涉及到父节点与子节点之间的关联不正确,导致数据展示或操作上存在异常。在LayUI的树形...

    经典表关联与多表查询终稿.pdf

    主键表被称为父表或主表,外键表则被称为子表或详细表。 例如,在Oracle数据库中,我们可以通过表连接技术(table join)来实现多表查询。表连接的基本条件是两个表必须有公共字段,且在一个表中,这个公共字段是...

    二级VFP中两个表的指针同步变化

    3. **链接主表**:在子表格的 `LINKMASTER` 属性中设置父表名称。 4. **设置子表索引**:在 `CHILDORDER` 属性中设置子表使用的索引名称。 5. **定义关系表达式**:在 `RELATION EXPR` 属性中设置用于连接的父表字段...

    mysql实现多表关联统计(子查询统计)示例

    3. **数据归档**:对于历史数据,可以定期归档到低频率访问的表中,减少主表的大小,提高实时查询性能。 4. **物化视图**:如果查询模式固定,可以创建物化视图,预先计算好结果并存储,减少实时查询的压力。 通过...

    MSserver自关联表的级联删除

    `SuperID`字段使得`Section`表成为自关联表,每个记录可以有其他记录作为其子记录。 接着,我们创建了一个`DelSection`触发器,这个触发器分为以下几个步骤: 1. 定义两个临时表`@idtable`和`@lastidtable`,分别...

    oracle主外键查询

    这个查询结果将展示出外键关联的父表名称、外键约束名称、关联列名称以及关联的子表名称。 ### 三、示例代码解析 根据提供的部分SQL语句,我们可以看到作者使用了`all_constraints`、`all_cons_columns`等视图来...

    SQL Server数据库中关联数据表的设计方法探讨.pdf

    外键约束能够保证参照完整性,即当主表(父表)的某个记录发生变化时,依赖于该记录的从表(子表)的相关记录也会相应地进行更新,从而维护数据的一致性。 文章中提出了一个设计方法,即当需要向关联数据表中增加...

    openstack删除数据库中instance关联表内容的方法

    解决上述问题的关键在于按照正确的顺序执行删除操作,即先删除子表中的相关记录,再删除父表中的记录。下面将详细介绍如何安全地删除与实例相关的记录。 #### 删除步骤详解 ##### 第一步:删除关联表中的记录 首先...

Global site tag (gtag.js) - Google Analytics