1

我正在设计一个用于存储股东列表的数据表(-s)。如果股东是被提名人,它会披露股东名单。这些都需要有一堆类似的参考资料。因此,我想将所有内容存储在一张表中。被提名人是注册股东,因此,他们在系统中有一个帐号,我从中获取数据。与此相反,来自代名人披露的股份所有者没有自己的帐号,而代名人的股份帐号。

我在表中添加了一个唯一性。我想假设所有注册股东和被提名人在这个领域都有 0。披露列表(通过被提名人工作的非注册股东)在此唯一性文件中的值高于零。基本上,一个编号列表。

我需要知道这个披露的股东所属的被提名人。所以,我们要进行自我参照。如果不是 uniquifier 字段,它可能没问题。在主键的一部分上创建外键并假设唯一标识符字段为零是非法的。所以,请你建议一个演练。

为了更好地解释,这里是摘录:

Create Table Account (
  AccountId Int,
  Uniquifier Int,

  NomineeId Int,

  Constraint PK$Account Primary Key (AccountId, Uniquifier)     
)

我想做的是这样的:

Alter Table Account 
  Add Constraint FK$SelfReference Foreign Key (NomineeId) References Account (AccountId)

这是非法的,因为

There are no primary or candidate keys in the referenced table 'Account' that match the referencing column list in the foreign key 'FK$SelfReference'.

任何帮助表示赞赏。

4

1 回答 1

3

您可以添加一个计算列,该列将0在应该强制执行 FK 时使用,NULL否则。然后可以在外键引用中使用它:

Create Table Account (
  AccountId Int,
  Uniquifier Int,

  NomineeId Int,
  NomineeXRef as CASE WHEN Uniqueifier > 0 THEN 0 END persisted

  Constraint PK$Account Primary Key (AccountId, Uniquifier),
  Constraint FK$SelfReference Foreign Key (NomineeId,NomineeXRef) References Account (AccountId, Uniquifier)     
)
于 2013-09-09T07:26:10.643 回答