Как мне составить таблицу, где требуется один из двух внешних ключей? - PullRequest
1 голос
/ 26 августа 2011

Я создаю таблицу прав собственности на файлы.Файл может принадлежать как одному пользователю (таблица Пользователи ), так и группе пользователей (таблица Группы пользователей ).Я хотел бы сделать все эти отношения одной таблицей, в которой каждый кортеж является владельцем группы или владельцем файла.

Users: User_ID (PK), name, email
Группы пользователей: UserGrp_ID (PK), имя, creator_ID (FK для пользователей)

TestGroupOwnerships: ???

Я думаю, что возможно сделать обе отношения какодин стол, но я не совсем уверен, как.Также допустимо изменение таблиц Users или UserGroups (все еще на стадии планирования).

Спасибо,

Alex

Ответы [ 3 ]

3 голосов
/ 26 августа 2011

Вы могли бы:

  • разрешить NULL в обоих столбцах FK
  • добавьте CHECK CONSTRAINT, чтобы убедиться, что один из них не равен нулю:
ALTER TABLE dbo.MyTable ADD CONSTRAINT
    CK_MyTable CHECK (Column1 IS NOT NULL OR Column2 IS NOT NULL)
GO
1 голос
/ 26 августа 2011

enter image description here

Примечания

  1. OwnerID = PartyID (OwnerId - это имя роли PartyID в файле таблица).
  2. UserID = PartyID (UserID - это имя роли PartyID в таблице Пользователь .)
  3. GroupID = PartyID (GroupID - это имя роли PartyID в таблице Group .
0 голосов
/ 26 августа 2011

Как насчет:

Иметь таблицу с (File, OwnerID (int), OwnerType (Char (1))

Где OwnerID может быть либо UserID, либо GropuID, а OwnerType может быть либо('G' - Группа или 'U' - Пользователь)

Или ....

Есть таблица с (File, OwnerID, GroupID), в которую присоединяется объект, заполненный OwnerID.пользовательская таблица и кортеж с заполненными GroupID объединяются в таблицу Groups.

...