zoukankan      html  css  js  c++  java
  • 逻辑数据库设计

    多态关联

      先说明什么是多态关联。

      假设我们有一张地址表,其中的地址可能是对于User中的,也可能是对于Orders中的。

      

      以上,只是举个例子,实际的例子还有很多,比如我们要设计一个内容管理系统(CMS),我们的CMS有一个文章表,一个软件表。还要求支持评论,那么我们的评论表的Id是引用文章表还是引用软件表呢?

      对于以上例子的缺点,貌似书本上有故意为此多态关联的模式走软的嫌疑。缺点不说了,主要是查询麻烦,其次不能够支持外键约束。

    解决方案

      交叉表

      对于这种需要外键引用为多个表的情况,可以建立一张交叉表。让Address不再依赖Orders或Users。

      

      优点:

      引用完整性支持。

      缺点:

      如果我们希望一个给定的地址,只能够在一张交叉表中出现一次,上面的复合主键已经做到了。如果希望一个地址可以在一张交叉表中出现多次,可以取消复合主键。但是不能够保证一个地址不在多张交叉表中出现,这需要我们再程序代码中实现。

      实际上,多态关联与上篇文章提到的,实体-属性-值有关系。

      如果前面采用的是类表的设计,根本不会出现这个问题,上面的地址,也可以依赖倒置。比如在Order表中添加一个AddressId、User表中添加一个AddressId解决。

      假设,采用类表继承的方法。直接将Address用外键指向基表就OK了根本就没这个问题。书中的这一篇写得有点莫名其妙。既然我已经写完了,算了,不管了。

  • 相关阅读:
    C# 用this修饰符为原始类型扩展方法
    windows7命令行终端获取管理员模式随笔
    C语言---斐波那契问题
    C语言--pow()函数实现
    数组排序之选择排序
    求数组逆置(数组与指针实现)
    字符串函数之Strtok()函数
    for循环的灵活性
    C语言--isspace()函数实现
    异构无线网络之QOS简介
  • 原文地址:https://www.cnblogs.com/kissdodog/p/3344929.html
Copyright © 2011-2022 走看看