如何在 SQL Server 中创建与非主键的关系?

Shr*_*itz 8 foreign-key sql-server constraint

我有一个用户表,它有两列一个名为 UserID 的主键和另一个名为 UserName 的列。

  • 用户 ID (int) PK
  • 用户名 (varchar(256)

它们都是独一无二的,但出于某些原因,我决定使用 UserName 作为其他表中的参考。因此,例如订单表通过 UserName 而不是 userid 引用了用户。

  • 订单号
  • 用户名

我想在引用 UserName 和 Users 表的所有表之间创建关系,以便获得 SQL Server 的级联更新/删除功能。

但是 SQL Server 不允许我在非主键列上创建关系。有什么方法可以在不更改用户表的情况下获得级联更新/删除功能,以便 UserName 是主键而不是 UserID?

Mar*_*ith 13

创建唯一索引或唯一约束,UserName然后您可以在 FK 约束中引用它。

你的声明是

Sql Server 不允许我在非主键列上创建关系

是不正确的。SQL Server 只关心参与 FK 关系的列是否定义了唯一索引。