一、前言

在数据库设计中,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)实际业务功能

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

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

班级: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框架是非常重要的。

三、参考文档

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

http://baike.baidu.com/view/3566336.htm

http://baike.baidu.com/view/3246364.htm

Hibernate Reference

MYSQL中的主表和父表_主表,从表,关联表,父表,子表相关推荐

  1. 用于在MYSQL中创建存储过程的关键字是_下面选项中,用于在删除存储过程时,检测存储过程是否存在的关键字是_学小易找答案...

    [判断题]秦陵兵马俑三号坑设计的是 军事指挥部 . [单选题]以下不是超塑性变形特点的是:( ) [判断题]如果从表中的外键引用了主表中的值,则不能删除主表中被引用的数据. [单选题]下面选项中,用于 ...

  2. mysql中以下正确的sql是_总结MySQL中SQL语法的使用

    --where子句操作符: where子句操作符 = 等于 <> 不等于(标准语法) != 不等于(非标准语法,可移植性差) < 小于 <= 小于等于 > 大于 > ...

  3. mysql中的级联删除的语句_级联删除sql语句-数据库级联删除语句-sql删除语句

    SQl语句的级联删除问题 删除应该有顺序 1,删除link表 delete from ref,link where ref.link_code=link.link_code and link_id=? ...

  4. mysql中a b为什么是假_[灵魂拷问]MySQL面试高频问题(工程师方向)

    前言 本文主要受众为开发人员,所以不涉及到MySQL的服务部署等操作,且内容较多,大家准备好耐心和瓜子矿泉水. 前一阵系统的学习了一下MySQL,也有一些实际操作经验,偶然看到一篇和MySQL相关的面 ...

  5. 在mysql中如何添加外键约束_如何在MySQL中设置外键约束

    (1) 外键的使用: 外键的作用,主要有两个: 一个是让数据库自己通过外键来保证数据的完整性和一致性 一个就是能够增加ER图的可读性 有些人认为外键的建立会给开发时操作数据库带来很大的麻烦.因为数据库 ...

  6. mysql中decimal不能为空吗_程序员,知道Mysql中事务ACID的原理吗?

    点击上方"linkoffer", 选择关注公众号高薪职位第一时间送达 引言 照例,我们先来一个场景~ 面试官:"知道事务的四大特性么?" 你:"懂,A ...

  7. mysql中的运算符的执行顺序_【MySQL】执行顺序

    我去找你❤️ 我给你买❤️ 我带你去❤️ 我很爱你❤️ 我们回家❤️ 我们结婚❤️ 你听过最孤独的话是什么? 同学,code就剩你没提交了 今天讨论的话题是 MySQL执行顺序 ??? 先养眼,再看题 ...

  8. mysql中3个月之前日期_在MySQL中从当前日期选择当前日期到3个月之间的日期?

    使用BETWEEN和INTERVAL实现此目的.让我们首先创建一个表-mysql> create table DemoTable -> ( -> AdmissionDate date ...

  9. 在mysql中如何为连接添加索引_在MySQL中如何为连接添加索引

    http://hackmysql.com/case4 译文: 我先通过一个简单的例子说明在MySQL中如何为连接添加索引,然后再看一个有挑战性的例子. 简单的3个表的连接 表结构很简单,3个表tblA ...

最新文章

  1. 集成Lucene和HBase(转)
  2. Android 混淆详解
  3. VTK:Filtering之ImplicitBoolean
  4. 【小技巧】字符char与整型int的相互转换
  5. libjpeg移植到arm
  6. Ext Designer
  7. 微服务升级_SpringCloud Alibaba工作笔记0009---阿里云部署微服务_在内网不同机器上_报错_注册中心找不到对应的机器_遇到java.net.UnknownHostExceptio
  8. java数组查找文本_基于数组的二叉查找树 Binary Search Tree (Java实现)
  9. python的系统模块_Python操作系统模块
  10. java程序拦截dde漏洞问题_Office DDE漏洞学习笔记
  11. python测量 检测软件_pytest首页、文档和下载 - Python 测试工具 - OSCHINA - 中文开源技术交流社区...
  12. android自动完成输入框,Android——自动完成输入框提示功能的菜单_AutoCompleteTextView...
  13. HTTP 长连接原理
  14. 王道计算机网络 第三章 数据链路层
  15. 搭建JIRA避坑指南
  16. http协议相关内容,C/S与B/S,ip报文,TCP,UDP
  17. C#+ItextSharp 查看pdf文件页面尺寸
  18. python 英语分词_如何用Python做中文分词?
  19. web前端开发经验总结
  20. 事务统计系统软件 php,PHP数据库事务处理

热门文章

  1. ABAP:关于文本(Read_text,Save_text)
  2. 货拉拉周胜馥,这次赌“输”了?
  3. 合作分享还是独占独食?阿里健康、京东健康走出了两条不同的路
  4. python 阿里云短信接口_阿里云短信PythonSDK的用法
  5. js rsa验签_js rsa sign使用笔记(加密,解密,签名,验签)
  6. linux 查看flash大小,Linux OpenWRT查看CPU,RAM,Flash信息参数
  7. java实现123n_用Java编程 :输入一个正整数n,输出n!的值。 其中n!=1*2*3*…*n。 求高手指点...
  8. Echarts开源可视化库学习(二)常用图表的实现与效果
  9. BUUCTF(pwn)jarvisoj_fm --格式化字符串漏洞
  10. Python中两种文件修改的方式