将关系表与其他表链接是否正确?

时间:2017-02-08 23:09:52

标签: mysql sql-server database relational-database powerdesigner

我想知道将关系表与其他表链接是否正确。我在PowerDesigner中试过它,但它给了我一个警告。但是:我在“多对多”关系中有两个名为“Client”和“Staff”的表。在给定的关系表中,我在1对多的实现中链接了另外两个表。关系表现在有两个主键(员工的主键和客户端的主键)和2个外键。这是一个正确的程序吗?我有这种情况: enter image description here

警告信息为:

  

类别检查对象位置   表索引索引包含索引'生成租金历史.GENERATE_RENT_HISTORY_PK'包括'GENERATE_RENT_HISTORY_FK'::生成租金历史

1 个答案:

答案 0 :(得分:1)

一个表有一个复合主键是有效的,该复合主键由两列组成,并且每个列都是一个外键。并且其他列也是外键是有效的。

我不熟悉PowerDesigner,但我怀疑警告消息不是关于外键约束,而是涉及冗余索引。

为支持PRIMARY KEY约束,UNIQUE INDEX上将(idstaff,idclient)

为了支持FOREIGN KEY约束,我们需要一个前导列为idstaff的索引,另一个索引的前导列为idclient

(idstaff)上的索引多余

我们已经有一个索引,其前导列为idstaff ...主键索引。

就表定义而言,这两个索引足以支持引用staffclient的外键约束:

 PRIMARY KEY (idstaff,idclient)
 KEY generate_rent_history_IX1 (idclient)

无需添加如下索引:

 KEY generate_rent_history_IX4 (idstaff)

我怀疑PowerDesigner被指示生成该冗余索引,并发出警告,指出实际上并不需要索引。

(我只是猜测PRIMARY KEY中列的顺序。如果列是以idclient作为前导列的另一种方式,那么我们需要idstaff上的索引列,idclient列上的索引将是多余的。)