SQL反模式笔记6——使用多用途外键(多态关联)

目标:引用多个父表

反模式:使用多用途外键。这种设计也叫做多态关联,或者杂乱关联。

  多态关联和EAV有着相似的特征:元数据对象的名字是存储在字符串中的。

  一条记录,要么是存储的X,要么是存储的Y。X、Y可能是有关联的,也可能是完全无关的。

    例如:select * from a

    left join b on a.xid=b.id and a.xType='b'

    lefe join c on a.xid=c.id and a.xType='c'

识别反模式:

  1、用这种方式,可以和任何表关联。

  2、我们的数据库设计不能声明外键。

  3、有一个列,是专门用来说明其它列是和什么东西相关的。

合理使用反模式:

  尽量避免多态关联——应该使用外键约束来确保引用完整性。多态关联通常过度依赖上层代码而不是数据库的元数据。

解决方案:

  1、反向引用。其实多态关联是一个反向关联

  2、创建交叉表。为每个父表创建一个交叉表。

    交叉表大多用来存储多对多关系,如果我们现在的关系是一对多,那么可以通过在交叉表上简历UNIQUE约束来保证一对多。

  3、创建公用的超级表。即:有多个交叉表,但是所有父表其实是一个公用表。

转载于:https://www.cnblogs.com/anyenajie/archive/2012/05/05/2485092.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值