【问题标题】:SQL Server Management Studio - adding foreign key confusing?SQL Server Management Studio - 添加外键令人困惑?
【发布时间】:2011-04-23 05:39:55
【问题描述】:

我总是觉得在 Management Studio 中将外键添加到主表会令人困惑。

假设我有一个

Table1 
{
    ID int, -- Primary Key
    Table2ID int, -- Refers to Table2's ID 
}

Table2 
{
    ID int, -- Primary Key
    SomeData nvarchar(50)
}

我正在通过Right Click -> Relationships -> Table and column specification 向 Table1 添加一个外键。我将“主”弹出窗口设置为 Table2,ID,将“外键表”设置为 Table1,Table2ID。

我的问题:

  1. 不应该列出 Table2 “外键表”和 Table1 为 首要的关键?是我的理解 错误的?

  2. 当我保存时,我收到一条警告“以下表格将保存到您的数据库中。”它显示了两个表。我真的不明白这个。我只更改了 Table1。为什么显示第二个表格?

【问题讨论】:

    标签: sql sql-server tsql ssms management-studio-express


    【解决方案1】:

    按照这种方式在你的表中创建一个外键。

    1. 右键单击该列,然后单击关系

    1. 点击...中的Tables And Column Specific

    1. 选择主键表和左侧键,然后选择要映射的当前表键右侧

    1. 点击Tables And Column Specific中的向下箭头以确认外键映射。

    1. 点击关闭按钮,现在就创建了一个外键。

    【讨论】:

      【解决方案2】:
      • 单击表格旁边的展开符号。
      • 右键单击“Keys”文件夹并选择“New Foreign Key”。
      • (或者,您可以在打开表格时单击工具条上的“关系”按钮)
      • 单击“表和列规范”行上的“...”按钮打开编辑器。
      • 左侧的下拉菜单将是您从中添加的表,静态文本字段将列出您要添加到的表。
      • 使用下拉菜单指定您的约束,并确保两边的列数相同。

      【讨论】:

      • 问题是如何在 SSMS 中做到这一点。因此,这个答案得到了我的投票。
      • 我认为如果“新外键”没有出现,那么你没有权限之类的?
      【解决方案3】:
      ALTER TABLE dbo.Table1
        ADD CONSTRAINT FK_Table1_Table2
          FOREIGN KEY(Table2ID) REFERENCES dbo.Table2(ID)
      

      【讨论】:

      • 如果您发布代码、XML 或数据示例,在文本编辑器中突出显示这些行,然后单击编辑器上的“代码示例”按钮 ({ })工具栏以很好地格式化和语法突出显示它!
      【解决方案4】:

      1.不应该为“外键表”和表1列出表2 首要的关键?是我的理解 错了吗?

      我相信你的理解是错误的。 Table2 是您要引用其主键的表。因此它列在主键下。 Table1 是将具有外键的表(对另一个表的主键的引用);因此它被列在“外键表”下。

      至于为什么保存两个表,即使外键后来被列为属于 Table1:我相信这是因为外键约束了两个表。他们都必须“了解”约束,因此他们都需要被保存。

      【讨论】:

        【解决方案5】:

        为什么不直接使用等效的 T-SQL 语句?对我来说似乎更容易,更容易混淆:

        ALTER TABLE dbo.Table1
          ADD CONSTRAINT FK_Table1_Table2
            FOREIGN KEY(Table2ID) REFERENCES dbo.Table2(ID)
        

        当我读到这篇文章时,我相信这会立即清楚这两个表涉及到什么,以及它们是如何连接的(Table1.Table2ID --(references)--> Table2.ID

        如果您想留在 SSMS 设计器世界:您还可以创建一个涉及的表的数据库图表,然后只需将您的 Table2ID 列从 Table1 拖放到 Table2 并将其拖放到 @ 987654327@ 列 - 这会以图形方式告诉 SSMS 您想要做什么,您只需要查看您的选择并在弹出的对话框中单击“确定”。

        【讨论】:

        • 我知道我可以使用 T-SQL,但我想知道这种设计背后的原因。拖放也会打开相同的窗口...
        猜你喜欢
        • 2019-09-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-21
        • 2022-01-17
        • 2023-04-05
        相关资源
        最近更新 更多