2011-08-26 159 views
1

我正在创建一个文件所有权表。文件可以由单个用户拥有(表用户)或一组用户(表用户组)。我想将整个关系作为一个表格,其中每个元组都是一个组的所有权或用户对文件的所有权。如何制作需要两个外键之一的表格?

用户:USER_ID(PK),姓名,电子邮件
群组:UserGrp_ID(PK),名称,creator_ID(FK到用户)

TestGroupOwnerships:???

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

感谢,

亚历

+0

可能重复[可能的做一个MySQL外键给两个可能的表之一?](http:// stackoverflow。com/questions/441001 /可能做的一个mysql-foreign-key-to-one-of-two-possible-tables) –

+1

你试图实现的是多态关系。看看已经回答的问题[这里](http://stackoverflow.com/questions/441001/possible-to-do-a-mysql-foreign-key-to-one-of-two-possible-tables) –

回答

3

您可以:

  • 允许NULL两个FK列
  • 添加CHECK约束,以确保其中之一就是非空:
ALTER TABLE dbo.MyTable ADD CONSTRAINT 
    CK_MyTable CHECK (Column1 IS NOT NULL OR Column2 IS NOT NULL) 
GO 
+1

不会是和** OR **:'(Column1 IS NOT NULL OR Column2 IS NOT NULL)' –

+1

在我的情况下,我真正需要的是column1或column2不是null,但不是两个(XOR)。所以我认为这将工作:(Col1 IS NOT NULL或COL2 IS NOT NULL)和(COL1 IS NULL OR COL2 IS NULL) – Raidil142

0

如何:

有一个表(文件,OWNERID(INT),OwnerType(CHAR(1))

哪里OWNERID可以是UserID或GropuID和OwnerType可以是('G' - 组或'U' - 用户)

或....

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

1

enter image description here

  1. OwnerID = PartyIDOwnerIdPartyID文件表中的角色名)。
  2. UserID = PartyIDUserIDPartyID用户表中的角色名。)
  3. GroupID = PartyIDGroupIDPartyID集团表中的角色名)的