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

Пользователи: User_ID (PK), имя, адрес электронной почты
Группы пользователей: UserGrp_ID (PK), имя, creator_ID (FK для пользователей)

TestGroupOwnerships: ???

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

Благодарность,

Alex

1
Raidil142 26 Авг 2011 в 20:35

3 ответа

Лучший ответ

Ты мог бы:

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

enter image description here

Примечания

  1. OwnerID = PartyID (OwnerId - имя роли PartyID в таблице Файл ).
  2. UserID = PartyID (UserID - имя роли PartyID в таблице Пользователь .)
  3. GroupID = PartyID (GroupID - это имя роли PartyID в таблице Группа .)
1
Damir Sudarevic 26 Авг 2011 в 16:54

Как насчет:

Есть таблица с (File, OwnerID (int), OwnerType (Char (1))

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

Или....

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

0
Icarus 26 Авг 2011 в 16:41