如何将外键指向复合主键?

时间:2011-04-17 21:44:02

标签: sql sql-server tsql

我有一个表登录,其中包含登录名和密码字段。两者都是主键。

我有一张桌子角色。哪个登录可以有多个字符。那么外键是如何工作的呢?

如何在Character表中创建外键以登录?

我应该在Character表中创建2个字段作为外键以指向Login吗?

谢谢!

1 个答案:

答案 0 :(得分:3)

在表创建或更改脚本中使用以下内容:

create table character (
  field1 varchar(30),
  ...,
  login varchar(12),
  password varchar(128),
  foreign key (login, password) references login (login, password)
)

现在,这就是说,在您的登录表的主键中包含密码似乎很奇怪。我建议只在登录表上使用主键,或者甚至是代理键(整数标识)。使用包含登录名和密码的方法,您将允许在同一登录下进行多次注册。这可能没问题,但看起来您实际上可能会创建一个单个用户意外创建多个登录的情况。此外,它将使管理丢失的密码恢复变得更加困难。最后,每次密码更改(并且用户可以随时更改密码)时,必须在每个引用字段中更新密码,并且会使密码更改大大复杂化。