前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SQL反模式学习笔记7 多态关联

SQL反模式学习笔记7 多态关联

作者头像
张传宁IT讲堂
发布2019-09-17 17:14:38
9260
发布2019-09-17 17:14:38
举报

目标:引用多个父表

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

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

在多态关联中,父表的名字是存储在Issue_Type单独一列中,有时候这样的设计被称作:混合数据与原数据。

查询示例:

select * from A as a

     left join B as b on a.xId=b.Id and a.xType='b'

     lefe join C as c on a.xId=c.Id and a.xType='c'

如何识别反模式:当出现以下情况时,可能是反模式

(1)这种标记框架可以让你将标记(或者其他属性)和数据库中的任何其他资源联系起来。

就想EAV的设计一样,应该怀疑任何生成有无线扩展性的设计。

(2)不能在数据库中国声明外键。

(3)有一列,用来说明这条记录的其他列是和什么相关的。

任何外键都强制一张表中所有的行引用同一张表。

合理使用反模式:应该尽量避免使用多态关联,应该使用外键约束等来确保引用完整性。

因为:多态关联通常过度依赖上层程序设计而不是数据库的元数据。

解决方案:让关系变得简单

1、反向引用,多态关联是一个反向关联

2、创建交叉表:为每个父表创建一张独立的交叉表,每张交叉表同时包含一个指向目标表的外键和一个指向对应附表的外键。

交叉表大多用来存储多对多关系,如果关系是一对多,那么可以通过在交叉表上建立UNIQUE约束来保证一对多。

使用交叉表可以保证引用完整性。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2014-10-13 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档