Какой способ сохранения разрешений более эффективен в базе данных MySQL? - PullRequest
0 голосов
/ 19 апреля 2011

Я хочу сохранить разрешения как для отдельных пользователей, так и для групп пользователей. В моей базе данных mysql у меня есть таблица разрешений, где я храню имя разрешения и идентификатор разрешения. У меня есть таблица пользователей, в которой я храню имя пользователя, пароль и т. Д., В которой также содержится идентификатор, и у меня есть таблица групп, в которой хранятся имя группы и идентификатор группы.

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

int group id | int permission id

int user id | int permission id

или было бы лучше иметь такой стол;

int id | int permission id | enum('user','group')

Ответы [ 3 ]

2 голосов
/ 19 апреля 2011

Я бы рекомендовал использовать две таблицы.

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

Во-вторых, другие программисты будут легче понимать.

1 голос
/ 19 апреля 2011

Я сомневаюсь, что между вашими подходами будет большая разница в производительности;но, как и во всех вопросах производительности и оптимизации, чувства и догадки не имеют значения, важны только профилированные результаты.Какой из них будет более эффективным, зависит от ваших данных, вашей базы данных, ваших схем доступа и того, что «эффективный» означает (пространство? Время? Усилия разработчика? Окончательные денежные затраты?) В вашем контексте.

При этом,Использование двух таблиц является лучшей структурой, поскольку позволяет вам получать внешние ключи из таблицы разрешений группы обратно в таблицу групп, а таблицу разрешений пользователей обратно в таблицу пользователей.Даже если бы это было быстрее в одной таблице, я бы все равно выбрал две: целостность данных важнее, чем тратить пару мкс процессорного времени, я не вижу особого смысла в быстром доступе к ненадежным или поврежденным данным.

0 голосов
/ 19 апреля 2011

Первый способ выглядит более экономичным, второй - более экономичным.Для скорости уникального индекса во 2-м случае вам придется индексировать в 1-м и 3-м полях.Подумайте об этом немного больше, любые потенциальные выгоды от этого 2-го пути не стоят того, ИМО.Там может быть какой-то третий способ, но из двух вы разместили первый лучше.Просто, чисто и быстро.

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