Я работаю с набором таблиц, который устанавливает денормализованную структуру местоположения со следующей схемой:найти самый верхний элемент в иерархии денормализованного
Location (Name,Id)
Sublocation1 (Name,Id,LocationId)
Sublocation2 (Name,Id,Sublocation1Id)
Sublocation3 (Name,Id,Sublocation2Id)
И таблицей, которая отслеживает связь между пользователем и каждым уровень:
UserLocation (User,LocationId,Sublocation1Id,Sublocation2Id,Sublocation3Id)
доступ к более высокому уровню грантов места доступа к любому уровню под ней, так что вторая строка в следующем примере является излишней, но третий ряд не является:
User Location Sublocation1 Sublocation2 Sublocation3
----------------------------------------------------------------
Joe Houston Plant West Building NULL NULL
Joe Houston Plant West Building Third Floor Room 42
Joe Houston Plant East Building Second Floor Room 21
Третья строка дает Джо доступ к только номера 21, но не другие Sublocation3s под вторым этажом
Вопрос: Как я могу найти все записи, которые предоставляют самый высокий уровень доступа без предоставление дополнительных прав Джо? Моя цель - убрать все эти посторонние записи из моей базы данных.
Я вижу несколько способов решить эту проблему, но ничего, что я смог перевести в логику набора, чтобы сделать хороший запрос.
Таким образом, запрос должен возвращать только второй ряд, поскольку он предоставляет доступ к комнате 42, к которой у Джо есть доступ уже из-за первого ряда, что дает ему доступ ко всем этажам «Западного здания» и всех комнат там. Правильно ли я понял вас? Не могли бы вы добавить еще несколько строк в пример данных с объяснением, какие из них должны и не должны возвращаться запросом. Если бы это помогло понять требуемую логику. –