【问题标题】:Is it a correct procedure to link a Relationship Table with other tables?将关系表与其他表链接起来是否正确?
【发布时间】:2017-02-08 23:09:52
【问题描述】:

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

警告信息是:

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

【问题讨论】:

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


    【解决方案1】:

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

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

    为了支持 PRIMARY KEY 约束,(idstaff,idclient) 上会有 UNIQUE INDEX

    为了支持 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 列上的索引将是多余的。)

    【讨论】:

    • 抱歉来晚了,但这不是一个错误,对吧?如果我将它导出到 MS Access,它可以正常工作吗?
    • 啊,在你看来,这个数据库的部分是不是第二个normail形式?我觉得可以(注意关系表代表的是客户的订单,由员工拿,其实有两个主键:idclient和idstaff。外键代表客户的订单,由员工写)
    • 更准确地说,generate_rent_history 的主键包含 列。这是一个复合主键。这 two 列是表上的 one 主键约束的组成部分。
    猜你喜欢
    • 2020-09-13
    • 2014-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多