Oddinn
Новичок
Проблема организации базы
Добрый день! У меня есть стандартная задача проверки прав доступа пользователя к материалам, и я хотел бы посоветоваться, правильно ли я организовал базу.
У меня материалы сайта (статьи) лежат в таблице (20 - 30 тысяч записей, около 50 Мб), каждый материал может относится к одной или нескольким группам доступа. Авторизованный пользователь может относится к одной или нескольким группам пользователей. Между группами доступа и группами пользователей существует связующая таблица, определающая права на совершение определенных операций (просмотр в списке, просмотр целиком, комментирование, редактирование, удаление и т.п.). Количество операций потенциально неограничено, также как и количество групп доступа и групп пользователей. Группа доступа у статьи и группы пользователей у полльзователя записываются по ID в поле VARCHAR(255) через запятую.
Такая организация позволяет достаточно гибко управлять доступом, но есть и обратная сторона. Для того, чтобы получить список статей для данного доступа, надо выполнить достаточно сложный SQL-запрос с использованием FIND_IN_SET и нескольких JOIN'ов, что естесственно весьма серьезно тормозит (до 0.5 секунды на запрос). Может кто-нибудь сталкивался с таким и знает более рациональный путь организауции управления доступом?
Добрый день! У меня есть стандартная задача проверки прав доступа пользователя к материалам, и я хотел бы посоветоваться, правильно ли я организовал базу.
У меня материалы сайта (статьи) лежат в таблице (20 - 30 тысяч записей, около 50 Мб), каждый материал может относится к одной или нескольким группам доступа. Авторизованный пользователь может относится к одной или нескольким группам пользователей. Между группами доступа и группами пользователей существует связующая таблица, определающая права на совершение определенных операций (просмотр в списке, просмотр целиком, комментирование, редактирование, удаление и т.п.). Количество операций потенциально неограничено, также как и количество групп доступа и групп пользователей. Группа доступа у статьи и группы пользователей у полльзователя записываются по ID в поле VARCHAR(255) через запятую.
Такая организация позволяет достаточно гибко управлять доступом, но есть и обратная сторона. Для того, чтобы получить список статей для данного доступа, надо выполнить достаточно сложный SQL-запрос с использованием FIND_IN_SET и нескольких JOIN'ов, что естесственно весьма серьезно тормозит (до 0.5 секунды на запрос). Может кто-нибудь сталкивался с таким и знает более рациональный путь организауции управления доступом?