Проектирование таблиц - запрос ИЛИ против отдельной таблицы - PullRequest
0 голосов
/ 11 ноября 2018

Мне нужна помощь в проектировании таблиц, и я не уверен, что будет лучшим вариантом. В основном мне нужно хранить, у кого есть разрешение на использование какого-либо конкретного ресурса Ресурс может использоваться различными типами сущностей и их экземплярами. Например вот простой способ представления того же

  1. У меня есть два разных типа Entity, EntityType1 и EntityType2 (в моем случае это должно быть действительно небольшое число не более 10)

  2. Мы можем иметь несколько экземпляров каждой сущности, которые мы можем идентифицировать с EntityId

  3. У нас может быть другой тип ресурса R1, R2, R3..etc

  4. Каждый тип ресурса может иметь несколько экземпляров

enter image description here

Существует еще одно требование, согласно которому я могу сказать, что все объекты определенного типа имеют доступ к одному конкретному экземпляру ресурса. Что-то похожее на * в столбце EntityId. У меня также будет индекс для entityId, поэтому я хотел сохранить его только в виде типа INT. Обратите внимание, что я могу иметь запись для всех и конкретной сущности вместе.

Я могу придумать два варианта

  1. Я выберу некоторый Invalid EntityId для представления всех сущностей (*), таких как 0, -1 или NULL, а затем использую предложение OR, чтобы возвратить, какие все ресурсы допустимы для конкретного entityId. Пример: EntityType = 'EntityType1' and (EntityId = 1 or EntityId = 0)
  2. Создайте отдельную таблицу и добавьте новую запись, чтобы указать все права доступа к объекту, а затем присоединитесь к таблице, чтобы вернуть данные.

Может кто-нибудь сказать мне, какие варианты предпочтительнее здесь, или любое другое предложение, я более склонен к варианту 2, так как нам не нужно хранить какое-то недопустимое значение в таблице, чтобы что-то указывать.

1 Ответ

0 голосов
/ 11 ноября 2018

У вас должна быть таблица сущностей, в которой могут быть столбцы для EntityId и EntityType.

У вас должна быть таблица ресурсов, которая будет иметь ResourceId и ResourceType.

Тогда, похоже, вам нужны две дополнительные таблицы:

  • Таблица сопоставления между сущностями и ресурсами.
  • Таблица сопоставления между типами сущностей и ресурсами.

Я бы начал с этого набора отношений. Использование подстановочных знаков в таблицах может привести к условиям join с or s, что действительно может замедлить процесс.

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