Проверьте мой дизайн базы данных / PHP / MySQL - PullRequest
3 голосов
/ 12 сентября 2009

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

Я хотел бы получить отзыв, если я делаю это наиболее эффективным способом:

 tblUsers:
    usrID       usrFirst       usrLast       phone    //etc....
      1            John          Doe 
      2            Jane          Smith
      3            Bill          Jones          


 tblAreas: 
    id      name   
     1       Marketing
     2       Support
     3       Human Resources
     4       Media Relations

 tblPermissions:

    id       usrID       areaID   
    1          1           2
    2          1           4
    3          2           1
    4          3           3

Прямо сейчас для каждой "области" у меня есть отдельные каталоги. Однако я хотел бы свести все эти каталоги к одному основному каталогу, а затем перенаправить пользователей при входе в их соответствующую «область» в соответствии с их разрешениями.

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

Большое спасибо!

Ответы [ 3 ]

3 голосов
/ 12 сентября 2009

Общий дизайн в порядке. Проблемы, которые возникают у меня, связаны с именами.

  • SQL не нуждается в венгерской нотации - обычно считается ненужным / плохим (tblUsers -> users).
  • Я бы не стал добавлять префиксы к именам столбцов ...
  • ... за исключением столбца "id", который всегда должен включать имя вашей таблицы (т.е. areaId)
  • Ваш «первый» и «последний» столбцы не имеют смысла (подсказка: firstName)
  • Я бы переименовал tblPermissions -> userAreas

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

Что касается использования отдельных каталогов для разных групп, я бы посоветовал против этого. Проведите проверку безопасности в своем коде вместо макета каталога.

Рассуждение:

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

Или что, если у вас есть перекрывающиеся действия?

@ brianpeiris: На ум приходит пара вещей:

  • Нет необходимости в псевдонимах столбцов в JOIN
  • Упрощает поиск по коду ("foo_id" дает меньше результатов, чем "id")
  • JOIN USING (foo_id) вместо JOIN ON (foo.id = bar.id).
1 голос
/ 16 сентября 2009

Да, похоже, что он полностью отвечает вашим потребностям со стороны базы данных.

Задача будет использовать данные настолько просто и декларативно, насколько это возможно. Где правильное место, чтобы объявить, в какой «области» вы находитесь? Делает ли каждая страница это, или есть функция, которая вычисляет это, или ваши контроллеры могут это сделать? как кто-то предлагает. Вторая часть оценивает текущего пользователя против этого. В идеале вы получите единственную функцию, например «security_check_for_area (4)», которая делает все это.

1 голос
/ 12 сентября 2009

Схема выглядит отлично.

Я бы посоветовал вам установить контроль доступа в контроллере и основать его на URL-пути, чтобы не кодировать его в каждом разделе.

...