mysql表设计角色互斥_数据库设计 – 拥有多个互斥的一对一关系是不好的做法?...

不同类型的汽车是在数据建模中反复出现的一般问题的实例.它在ER建模中称为“泛化/专业化”,在对象建模中称为“超类/子类”.

对象建模器使用对象模型中内置的继承功能来非常轻松地解决问题.子类只是扩展了超类.

关系建模者面临一个问题.如何设计表格以模仿从继承中获得的好处?

最简单的技术称为single table inheritance.有关所有类型汽车的数据被分组为一个单独的汽车表.有一个列car_type,它将所有单一类型的汽车组合在一起.没有汽车可以属于多种类型.如果一列与电动汽车无关,那么它将在与电动汽车相关的行中留下NULL.

这种简单的解决方案适用于较小和较简单的情况.存在大量的NULL会给存储开销增加一点点,并且会有一点点来检索开销.如果在可空列上进行布尔测试,开发人员可能必须学习SQL three-valued logic.起初这可能令人困惑,但人们已经习惯了.

还有另一种技术,称为类表继承.在这个设计中,除了组合的桌子,汽车之外,还有用于gas_car,electric_car和hybrid_car的单独表格.当您需要有关特定类型汽车的所有数据时,您可以使用适当的专用表加入汽车表.此设计中的NULL更少,但您可以进行更多连接.这种技术在更大和更复杂的情况下效果更好.

第三种技术称为共享主键.此技术通常与class table inheritance一起使用.子类的专用表具有作为其主键的car表中相应条目的主键的副本.可以将此id列声明为主键和外键.

这需要在添加新车时进行一些额外的编程,但它使连接变得简单,容易和快速.

超类和子类一直在现实世界中发生.别害怕.但要测试您的初始设计的性能.如果您的第一次尝试简单而有效,您将能够进行调整以加快速度.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值