【问题标题】:How to set 1 to 0...1 relationship in SQL Server Management Studio如何在 SQL Server Management Studio 中设置 1 到 0...1 的关系
【发布时间】:2013-10-21 08:36:28
【问题描述】:

我有桌子:

Users{UserId ...}
Professors{UserId ...}

我在两个表中都将UserId设置为PK,并建立了1:1的关系。

但如果我尝试插入新用户,它就不起作用,因为它也需要在 Professor 表中插入。

我想让一个用户在教授表中只能有 1 条记录,但我也想让它不必存在于教授表中(我不想让所有用户都成为教授 :)) .

如何在 SQL Server Management Studio 中设置 1 到 (0...1) 的关系?

我知道将强制键约束设置为 NO 不是解决方案 :)

【问题讨论】:

  • 我认为您已经反向设置了外键约束。它应该在Professors 表中,(UserId) 引用Users (UserId)。我建议您向我们展示CREATE TABLE 声明。

标签: sql database database-design relational-database ssms


【解决方案1】:

如果您有这些要求:

  • 用户可以是教授,也可以不是
  • 教授永远是用户

那么您是正确的,这是1 :: 0..1 关系。在 SQL 中,可以这样实现:

CREATE TABLE Users
  ( UserId INT NOT NULL
  , ...
  , PRIMARY KEY (UserId)
  ) ;

CREATE TABLE Professors
  ( UserId INT NOT NULL
  , ...
  , PRIMARY KEY (UserId)
  , FOREIGN KEY (UserId)
      REFERENCES Users (UserId)
  ) ;

根据您的描述,您可能已经以相反的顺序定义了外键约束。

【讨论】:

  • 我正在使用图表来设计关系。可以用图表解决这个问题吗?
  • 可能是的。我现在无法测试,但尝试颠倒 FK 的顺序。或者删除它并重新创建(以相反的顺序)。
【解决方案2】:

我认为你应该在这里使用外键。 教授 ID 应该是用户表中的外键,这将解决你所有的问题。

只要看看外键是什么以及如何编写外键查询

【讨论】:

    【解决方案3】:

    在professionals 表中,您应该创建一个ProfessorID 并将UserID 添加为一个可以为空的FK。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-04
      • 1970-01-01
      • 2021-02-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多