Проектирование базы данных SQL Server - 1 таблица против 2 таблиц - PullRequest
0 голосов
/ 15 октября 2019

У меня есть таблица с именем 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 запись группы является проблематичной.

Как лучше всего решать эту проблему?

1 Ответ

0 голосов
/ 15 октября 2019

Это не плохой дизайн.

Сделать GroupId обнуляемым, так что вы также можете вводить разрешения только для пользователя.

Кроме того, уникальное ограничение должно быть на трех столбцах вместе:ReportId, UserId, GroupId.

Таким образом, вы можете разрешить более одного отчета на пользователя / группу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...