Организационная структура, представленная в таблице

StackOverflow https://stackoverflow.com/questions/1688994

Вопрос

У меня есть приложение Access, в котором есть таблица сотрудников.Сотрудники относятся к нескольким различным уровням в организации.В организации 1 генеральный директор, 5 руководителей отделов, при этом под началом каждого начальника отдела находится несколько руководителей, а под началом этих руководителей находятся рабочие.

В зависимости от должности сотрудника он будет иметь доступ только к записям тех, кто находится под ним.

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

Это было полезно?

Решение

Один из распространенных способов хранения такого рода иерархических данных в базе данных использует только одну таблицу с примерно такими полями:

  1. идентификатор пользователя (первичный ключ)
  2. имя пользователя
  3. SupervisorId (самоссылающийся «внешний ключ», относится к другому идентификатору пользователя в этой же таблице)
  4. код позиции (может быть простым, например 1=лейки, 2=супервизор;или внешний ключ, указывающий на другую таблицу позиций и т. д.)
  5. ...все, что вам еще нужно хранить для каждого сотрудника...

Затем ваше приложение использует SQL-запросы для определения разрешений.Чтобы определить сотрудников, которых разрешено видеть руководителю «X» (например, чей идентификатор пользователя равен «3»), вы запрашиваете всех сотрудников, у которых SupervisorId = 3.

Если вы хотите, чтобы вышестоящие начальники могли видеть всех, кто находится под ними, самый простой способ — просто выполнить рекурсивный поиск.Т.е.запрос для всех, кто подчиняется этому большому боссу, и для каждого из них, кто ему подчиняется, на всем протяжении дерева.

Имеет ли это смысл?Вы позволяете базе данных выполнять работу по сортировке всех пользователей, потому что компьютеры хороши в таких вещах.

В этом примере я поместил код позиции на тот случай, если вы хотите, чтобы у некоторых людей были разные разрешения...например, у вас может быть код «99» для сотрудников отдела кадров, которые имеют право просматривать список всех сотрудников.


Возможно, я позволю другим людям попытаться объяснить это лучше...

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top