简书 賈小強
转载请注明原创出处,谢谢!
在面向对象中通过继承,子类具有了父类的东西,可以通过父类型的引用指向子类型的对象,这种能力被成为多态,如下图
继承与多态.png
而在关系型数据库中实际上也有继承,比如在一对多关系中,一的一方提供主键被称为父表,而多的一方用将父表的主键作为了外键被称为子表,由于这种引用关系,子表实际上具有了父表的东西,虽然只是引用形式的,如下图
父表与子表.png
如果按照面向对象的说法,也就说B表继承了A表,那么这里引出另一个问题,也就是面向对象中的多继承问题,假设B表同时继承了A表和C表,如下图
多继承.png
如图中说明的当一张表继承了另外多张表,那么需要多列外键,那么如果希望只用一个外键会怎么样呢?
答案是并不行,SQL不支持声明一个指向多张表的外键,但是有一个折中的方法,也就是不用外键,而通过通过增加一个类型列采用多态关联的形式
但多态关联的并不是个好办法,查询的时候和对应表进行关联并带上类型,查询并不方便,实际上多态关联是一个反向引用,可以变成如下形式
反向引用.png
通过将表关系改成上面这种形式查询和修改将变的更加容易
Happy learning !!
网友评论