多态关联:
当一个表中的某列可能要引用多个表,这时候需要增加额外的一列来确定引用来之那个表,一般为entity_type列。
可以使用反SQL模式中的几种方式来避免这个多余的列,但是会带来额外的开销。
解决方法一:
给每张父表都创建一个交叉表,例如一张评论表comment 可以评论bugs中的信息,也可以品论requires中的信息,这是增加两张表分别是commentBugs和commentRe
,但是交叉表一般是多对多关系才出现的,在这里一条品论一般只能对应一条bugs或者是一条requires,这是我们应该在交叉表中为comment_id列创建唯一索引
解决方案二:
使用超级父表,下面是简单的代码:
/**多态关联数据库实例反模式,使用超级表*/
/*超级表*/
CREATE TABLE issuse (
issuse_id INT UNSIGNED NOT NULL PRIMARY KEY
);
/*可以看成这两个表继承了issuse表*/
CREATE TABLE bugs(
issuse_id INT UNSIGNED NOT NULL PRIMARY KEY,
bugs_name VARCHAR(20),/*这里省略跟多列*/
FOREIGN KEY(issuse_id) REFERENCES issuse(issuse_id)
);
CREATE TABLE requires(