【问题标题】:What is a Primary/Foreign Key Field in this Database Model?此数据库模型中的主/外键字段是什么?
【发布时间】:2012-12-15 20:30:22
【问题描述】:

我正在查看此数据库模型,但我对某些表中的“PF”感到困惑。我的理解是 PF 是一个“主/外键”,也可以是一个复合键。我理解这种情况是多对多关系,但是像Menu_Courses 表这样的情况呢?主键显然是一个 int 类型的自动递增列,但是 menu_id 字段呢?这将如何在 SQL Server 等数据库中实现?

作者也在本页解释了PF字段:http://www.databaseanswers.org/tutorial4_db_schema/tutorial_slide_5.htm

【问题讨论】:

    标签: sql-server database-design


    【解决方案1】:

    我的理解是这些字段是定义它们的表的主键,同时它们是其他表的外键。

    menu_courses 具有对suggested_menusmenu_id 的引用,并与course_number 结合构成​​主键 - 即每个菜单/课程编号组合都是唯一的,并且唯一标识表中的一行。

    您通常会将其实现为suggested_menus 表上的外键字段。

    【讨论】:

    • 是的,但另外它们始终是复合主键的一部分,从不独立。
    • 那么为什么不把它变成 Suggested_Menus 表中的 FK 呢?有没有因为是复合主键所以不能为空之类的原因?
    • @Robert - 关键是它一个复合键。您希望 每个 菜单有多个课程,但任何一个菜单的课程编号都不相同。
    • 没错。如果您将其作为主键的一部分省略,则主键的其余部分将不是唯一的。
    【解决方案2】:

    我想这只是意味着它是表中复合主键的一部分,但同时也是外键。在 menu_courses 中,menu_id 引用 suggested_menus AND 是表主键的一部分。

    【讨论】:

      【解决方案3】:

      PF 表示该列既是主键又是外键。作为主键,它是构成主键的多个列之一。这就是复合键被引用的地方。

      例如,在表Recipe_Steps 中,recipe_idRecipe 表的外键。并且,它与Step_Number 一起构成Recipe 表中的主键。

      【讨论】:

        【解决方案4】:

        此处的描述具有误导性,当显示多个 PF 时,它们代表一个复合键。

        如果只显示一个PF,则表的PK是用来组成复合键的,Menu_Courses中似乎是这样。
        它有自己的PKPF组合键,由自己表的PK和父表的PK组成。

        【讨论】:

          猜你喜欢
          • 2014-10-24
          • 2017-05-07
          • 2016-04-24
          • 2021-02-20
          • 2021-10-24
          • 1970-01-01
          • 1970-01-01
          • 2011-01-11
          • 2017-06-10
          相关资源
          最近更新 更多