文档章节

共享主键、外键、关联表在表达对象关联关系时的微妙语义差别

猪刚烈
 猪刚烈
发布于 2014/10/12 11:40
字数 659
阅读 17
收藏 0

精选30+云产品,助力企业轻松上云!>>>

      外键作为一种做用在表上的参照性约束,自然是要求表中所有纪录必须遵守此约束,而如果允许外键列为空,那就等同打开一个扇后门,允许某些数据不必遵守这一约束。这是与外键的初衷是相违背的。如果说:两张表之间的数据存在一种“部分”参照关系,也就是说的如果A表中有部分数据是需要参照B表中的数据,而有的则可以没有参照,那么,使用关联表对两张表之间的数据进行关联可能是更好的选择!这种关系的微妙之外在于,它即表明两表数据之间有“一定的”参照关系,但又不是必须的,它们也可以没有这种参照,显然,这表达的是一种更为宽松的关系,体现到对象间的关系上时,它可以表达一般意义上的关联关系,即A可以依赖于B(为至多个都可以),反之亦然。它不像外键约束,我们知道,外键约束最适用于描述的是父子关系:即:每一个孩子都必定有一个父亲(多对一,且非空),每一个父亲可能有0至多个孩子(一对多,可空。注:考虑到没有孩子的人不可以称之为父亲,因此说用父子关系形容这一类对象间关系也有一点点为妥)

      对于关联表来说,除去上面所讲到的情况,通过给关联表中的外键设定唯一约束,还可以表达出“部分的”一对一关系,也即optional one-to-one,典型的例子就是桌子员工分配关系!

     对于共享主键,可能描述的是最为严格的关系了:一对一,且双方均不得为空,并且同时存在,同时消亡,有同样的生命周期。像Thread和Subject Post之间的关系一样。

 

最后简单归纳如下:

对于共享主键方式:单向/双向一对一关系(关联双方均不可为空且有一致的生命周期)

外键方式:单向多对一(一端不能为空),单/双向一对一(通过对外键加唯一约束来模拟,同样外键所在一端不能为空)

关联表:双向一对一,一对多/多对一,(特别是单向一对多建议使用关联表),多对多

猪刚烈

猪刚烈

粉丝 22
博文 708
码字总数 110
作品 1
海淀
程序员
私信 提问
加载中
请先登录后再评论。
关于为什么单向一对多(one-to-many)要使用关联表的再思考

在传统的数据建模中,允许为 Null 值的外键被认为是一种不好的实践,。这并不是 Hibernate的要求.---Hibernate文档 2013年1月29日:补充: 简单地说,数据库的外键关联所描述的最严格与最精准...

猪刚烈
2014/10/12
8
0
一对一映射的三种方式以及对lazyload的特别关注

一对一映射几乎涉及了所有可以使用的映射方式:共享主键、外键和关联表。每一种方式都有相对特定的使用场合。而与此同时,one-to-one关系的 lazy loading总是一个让人非常疑惑的问题,下文在...

猪刚烈
2014/10/12
27
0
Hibernate映射——一对一单向关联映射(五)

映射原理 两个实体对象之间是一对一的关联映射,即一个对象只能与另外唯一的一个对象相对应。例如:一个人(Person)只有一张身份证(IdCard)。我们看一下这个例子的对象模型,如下图所示: 对象...

architect刘源源
2018/01/11
21
0
hibernate一对一关系映射

分类: 主键关联: 1、两个实体对象的主键一样,以表明它们之间的一一对应关系; 2、不需要多余的外键字段来维护关系,仅通过主键来关联,即Person的主键要依赖IdCard的主键,他们共用一个主...

孤独成性
2016/10/19
10
0
总结:Hibernate关联关系映射——七种映射的实现(更新中)

Hibernate映射实体的一对一关联方式有共享主键方式和唯一外键方式。共享主键就是两个表的主键完全相同,保证一对一。唯一外键就是一个表的唯一外键对应另一个表的唯一主键,来保证一对一。 ...

xp731574722
2017/12/13
0
0

没有更多内容

加载失败,请刷新页面

加载更多

你看起来很好吃

你看起来很好吃 本文分享自微信公众号 - ZackSock(ZackSock)。 如有侵权,请联系 support@oschina.cn 删除。 本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。...

ZackSock
2019/10/25
0
0
Python绘制日历图和热力图

日历热力图 实现某商店2018年10月1号至2019年3月1号期间每一天盈利额(产生5000至30000区间的随机数)的数据可视化。 要求在鼠标放置每个单元格上时显示具体日期和对应数据 import datetime ...

气象学家公众号
07/03
0
0
#乔布简历#计协纳新季福利!乔布简历20元会员卡免费送

#乔布简历#计协纳新季福利!@乔布简历 20元会员卡免费送!活动规则:1)转发本微博/说说@ 三个好友;2)搜索关注“乔布堂”微信公众号,回复“BC016@你的QQ号”;截图发给计协微信公众号:j...

若川
2014/09/22
0
0
第十一届蓝桥第一场省赛题 走方格

走方格 问题描述: 在平面上有一些二维的点阵。这些点的编号就像二维数组的编号一样。从上到下依次为第 1 至第 n 行,从左到右依次为第 1 至第 m 列,每一个点可以用行号和列号来表示。现在有...

osc_kf7nv2km
2分钟前
0
0
HTTP/2协议之Stream【原理笔记】

前言 前面三篇介绍了HPPT/2的“连接前言”、“二进制桢”、“头部压缩”。本文从“流及多路复用”、“流状态”、“流量控制”、“流优先级”、“HTTP/2扩展”介绍HTTP/2协议流相关知识。 一、...

瓜农老梁
05/31
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部