如何创建一个需要两个外键之一的表?

时间:2011-08-26 16:35:08

标签: sql-server database database-design

我正在为文件创建一个所有权表。文件可以由单个用户(表用户)或一组用户(表用户组)拥有。我想把这整个关系作为一个表,每个元组都是一个组的所有权或用户对文件的所有权。

用户: User_ID (PK),姓名,电子邮件
用户组: UserGrp_ID (PK),name,creator_ID(FK to Users)

TestGroupOwnerships:???

我认为将这两种关系作为一个表来做是可能的,但我不确定如何。如果用户或用户组表需要更改(仍处于计划阶段),也可以接受。

谢谢,

亚历

3 个答案:

答案 0 :(得分:3)

你可以:

  • 在两个FK列上允许NULL
  • 添加CHECK CONSTRAINT以确保其中一个非空:
ALTER TABLE dbo.MyTable ADD CONSTRAINT
    CK_MyTable CHECK (Column1 IS NOT NULL OR Column2 IS NOT NULL)
GO

答案 1 :(得分:1)

enter image description here

备注

  1. OwnerID = PartyIDOwnerId文件表中PartyID的角色名称。
  2. UserID = PartyIDUserID用户表中PartyID的角色名称。)
  3. GroupID = PartyIDGroupID表中PartyID的角色名称。)

答案 2 :(得分:0)

怎么样:

有一个表(File,OwnerID(int),OwnerType(Char(1))

其中OwnerID可以是UserID或GropuID,OwnerType可以是('G' - 组或'U' - 用户)

或....

拥有一个带有(File,OwnerID,GroupID)的表,其中已填充OwnerID的touple连接到用户表,并且GroupID填充的元组连接到Groups表。