在表之间放置外键的好方法是什么

时间:2014-04-12 13:24:05

标签: sql-server tsql foreign-keys standards

我正在查看advantureworks数据库,我问自己"为什么表A有一个FK到表B,如果B表可以有一个FK到表A"

以更复杂的方式,请告诉我:

之间是否存在重要差异
CONSTRAINT FK_A_B   FOREIGN KEY(A_Key)
        REFERENCES B(B_Key),

CONSTRAINT FK_B_A   FOREIGN KEY(B_Key)
        REFERENCES B(A_Key),

1 个答案:

答案 0 :(得分:1)

我认为选择你的钥匙并不是一成不变的规则(尽管有规则),这更像是一个常识问题。

如果您有表格,例如:

CREATE TABLE [Person](

    [PersonID] [int] PRIMARY KEY NOT NULL,
    [FirstName] varchar(20) NOT NULL,
    [MiddleName] varchar (20) NULL,
    [LastName] varchar(20) NOT NULL,

)

CREATE TABLE [PersonInfo](

    [PersonID] [int] FOREIGN KEY REFERENCES [dbo].[Person] (PersonID) NOT NULL,
    [Phone] varchar(20) NOT NULL,
    [Email] varchar (20) NULL,
    [Address] varchar(20) NOT NULL,
)

PersonInfo表中的外键强制执行以下规则:PesonIn值在PesonInfo表中存在之前不存在于Person表中,其中Person由主键(PersonID)唯一定义

这是一个非常简单的例子,关系在真实数据库上会变得更加复杂,但重点是两个表之间存在逻辑关系。

您可以选择(如果有意义)您的外键和主键,但在设计数据库时需要考虑很多其他事项而不仅仅是一个简单的答案

您可以阅读更多内容:

Primary and Foreign Key Constraints

Creating Foreign Key Relationships

我希望这会有所帮助