2011-08-26 156 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集團表中的角色名)的