У меня есть таблица с именем Report
и другая с именем ReportRights
. Целью этих таблиц является ограничение доступа к отчету на основе пользователя или группы пользователей.
Таблица прав отчета:
- ReportRightsId (int - суррогатный ключ)
- ReportId (int - внешний ключ для отчета)
- UserId (int - нулевой FK для пользователей)
- GroupId (int - нулевой FK для групп)
- HasAccess (бит по умолчанию 0)
Проблема в том, что я хочу добавить уникальное ограничение к ReportId + UserId, а также к ReportId + GroupId, но в этой структуре таблицы я не могу, потому что ReportId 1, UserId 1, Id группы NULL, и при попытке добавить разрешение для идентификатора отчета 2 отключается ограничение нулевого идентификатора идентификатора группы отчетов.
Это плохой дизайн? Должны ли я иметь 2 таблицы: ReportGroupRights и ReportUserRights вместо этого? Если бы я делал интерфейсный интерфейс, они оба управлялись бы одной и той же «сеткой», поэтому 1 таблица имеет для меня смысл ... но невозможность принудительно установить только 1 запись пользователя или только 1 запись группы является проблематичной.
Как лучше всего решать эту проблему?