Перечесления в MySQL

Pauliceman

Новичок
Задача: определить имеет ли право доступа данный юзер к данному модулю.
Решение: использую таблицу из 2 столбцов, 1-й столбец - id юзера, второй столбец - список id-шников модулей к которым разрешен доступ этому юзеру (количества модулей я заранее не знаю и оно может изменятся).

Вопрос: как же лучше сделать этот список id-шников???
 

Фанат

oncle terrible
Команда форума
В отдельной таблице.
Реляционная модель для того и существует.
 

Pauliceman

Новичок
Это в смысле таблица вида userID, moduleID. И просто для каждого модуля делать новую строку?
 

Фанат

oncle terrible
Команда форума
да, именно так.
а точнее, для каждой связи юзер - разрешенный модуль.
 

Agatov

Новичок
Правильно.
Юзер заходит в модуль.
Модуль посылает запрос в базу данных
может ли юзер пользоватья этим модулем.

$zap1=mysql_query("select id from table where user='".$user."' and modul='".$modul."' ");
$pr=mysql_fetch_row($zap1);
if($pr[0])
{
//тогда имеет право пользоваться модулем
}
else
{
//не имеет права
}

при этом таблица имеет такое строение:
id int,
user text,
modul text

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

Я изложил суть идеи.Ты конечно можешь переделать
это по своему
 

Cougar

Кошак
Agatov
Неправильно.
Таблица должна быть вот такая:
[sql]
user_id int unsigned,
module_id int unsigned
[/sql]
И при этом должен быть уникальный составной индекс по полям user_id и module_id.
 

Agatov

Новичок
В свойм ответе я ясно дал понять как это сделать.
Ты можно сказать перефразировал мой ответ.
Какая разница как будет определяться юзер по нику или по id
То же самое могу сказать и про модуль.
 

Krisha

pain in the neck
Agatov
Начни с изучения теории, потом будешь пререкаться...
 

McLay

PHP5 BetaTeam
Объясните пожалуйста, чем такая модель лучше: user_id:array_of_modules

Где массив, в любом формате, например сериализованый php массив.

Если 90% запросов, которые возвращают список всех модулей для юзера.
 

jrip

Новичок
А не слишком ли расточительно для модулей заводить ещё одну таблицу? Не проще ли сделать одну:
id, moduls
id-айди юзера, уникальный.
moduls-список доступных модулей, объединённых разделителем. Тогда для проверки будет достаточно лишь одного запроса. Да и если будет ещё какая-то информация о юзере, не нужно будет заводить ещё одну таблицу.
 

SiMM

Новичок
Автор оригинала: jrip
Тогда для проверки будет достаточно лишь одного запроса.
А с двумя таблицами их что, десять будет?
Да и если будет ещё какая-то информация о юзере, не нужно будет заводить ещё одну таблицу.
А при двух таблицах, по вашему, недостаточно будет завести в таблице юзверей ещё одно поле?
PS: имхо, вам не стоило суваться в этот топик. Отвечать на мои вопросы тоже не надо - они риторические.
 

jrip

Новичок
SiMM
просто у меня есть похожая ситуация...
есть таблица с пользователями.. т. е. id, pass, name и т.д.
есть также список модулей. Для разрешённых конкретному пользователю я создал одно поле, в котором названиея разрешённых модулей записаны в виде модуль1&модуль2&модуль3
разве стоит делать ещё одну таблицу id - module? Т.е. правильный ли у меня метод или нет, если нет, то почему?
 

SiMM

Новичок
jrip, а я пока сам неопределился (поэтому тихо курил в сторонке - сам таких задачек пока не решал) - я лишь обратил твоё внимание на неверные высказывания. Если единственное необходимое действие - это запрос прав пользователя - то вполне можно воспользоваться вариантом с serialize. Если это утверждение неверно - хотелось бы услышать аргументы от гуру, чтобы принять их на вооружение в будущем.
 

jrip

Новичок
Хм.... а даже если единственное действие - запрос прав. Ну я например хочу сразу дать ему права на два модуля. Или сразу удалить парва на дава модуля. В моём-то случае всё очень просто. А вот как здесь сделать без лишних телодвижений?
 

Frol

Новичок
jrip
Начни с изучения теории (c) Krisha

-~{}~ 02.01.05 00:31:

разве стоит делать ещё одну таблицу id - module?
стОит.
Ну я например хочу сразу дать ему права на два модуля. Или сразу удалить парва на дава модуля. В моём-то случае всё очень просто. А вот как здесь сделать без лишних телодвижений?
не гони.
сразу видно, что ты ничего не понимаешь.
 
Сверху