Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Группы пользователей, рег данные в CMS 
:(
    Опции темы
Kirill Baranov
Дата 17.8.2006, 14:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 242
Регистрация: 30.6.2004

Репутация: -2
Всего: -2



Делаю CMS (для тренировки и приоберетения опыта). На данный момент дошел до раздела "Управления пользователями". Там есть группы пользователей, например, "Администраторы", "Партнеры", "Клиенты", "Дилеры"... И так далее. Когда создаю нового пользователя, то у каждого пользователя одинаковые поля: имя, фамилия, логин,пароль, мыло, сайт... А я хочу сделать так, чтобы у каждой группы пользователей были свои поля. У дилеров: город, страна, телефон, название компании. У клиентов: фио, мыло, сайт, включена ли подписка. У Партнеров: название компании, контактное лицо, факс.

В общем, у каждой группы юзеров свои замуты. Группы могут создаваться и удаляться. То есть должна быть такая гибкость. Как лучше реализовать такую структуру? Четыре таблицы: users, users_groups, users_fields, users_values (заполненные поля)? Так? Но это уж как-то черезчур, по-моему.

Кто какую схему может предложить?
PM MAIL   Вверх
skyboy
Дата 17.8.2006, 14:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 75
Всего: 260



не users_fields, а groups_fields, ибо определения набора информационных полей относится к группе, а никак не к отдельному пользователю. к пользователю относится только значение... 
Кста, это лучше в "Общие вопросы по базам данных"
Смотри. 
users - в этой таблице хранятся данные, единые для пользователей, независимо от группы.
iduser
name
login
password
registerDate
... etc ...
fields - список полей, которые должен будет заполнить юзер
idfield
name
groups - в этой таблице хранятся названия групп
idgroup
name
users_groups - здеся принадлежность пользователя какой-либо группе
idgroup
iduser
groups_fields - определяем, какие поля необходимо заполнить при принадлежности юзера к определённой группе
idgroup
idfield
users_values - данные о заполненных пользователями полях
iduser
idfield
value


PM MAIL   Вверх
Kirill Baranov
Дата 17.8.2006, 14:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 242
Регистрация: 30.6.2004

Репутация: -2
Всего: -2



skyboy, то есть считаешь эта схема все-таки нормальная? я её уже реализовал, но возникли сомнения по поводу её возможностей и влияния на загрузку процессора на сервере...
PM MAIL   Вверх
skyboy
Дата 17.8.2006, 14:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 75
Всего: 260



и нифига не много. а если у тебя мультиязычный фейс, то тебе надо будут ещё таблицы:
groups_names
idgroup
idlanguage
name
fields_names
idfield
idlanguage
name
Я уже молчу про то, что некоторые values могут быть ограничены в своём выборе(например, выбор страны только из списка, год - только с 1921 по текущий и так далее)... Тогда количество таблиц увеличится...

Добавлено @ 14:41 
Kirill Baranov, что значит "сомнения по поводу её возможностей"?
PM MAIL   Вверх
Kirill Baranov
Дата 17.8.2006, 14:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 242
Регистрация: 30.6.2004

Репутация: -2
Всего: -2



skyboy, да про возможности уже сомнения развеялись. Система получается очень гибкой. А для мультиязычности я собираюсь по-другому реализацию делать. Кол-во таблиц не буду увеличивать, просто с помощью ALTER для МуСКЛа буду добавлять столбцы типа name_lang, где lang  - ID языка.... Короче, сложно все так... бошка едет.
PM MAIL   Вверх
skyboy
Дата 17.8.2006, 14:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 75
Всего: 260



например, данные о пользователе $id с точки зрения группы $idgroup
Код

SELECT concat(f.name,":",uv.value)
FROM groups_fields gf
INNER JOIN fields f
ON f.idfield=gf.idfield
INNER JOIN users_values uv
ON on.idfield=f.idfield
WHERE gf.idgroup=$idgroup AND uv.iduser=$iduser

или полные данные о пользователе $iduser:
Код

SELECT concat(f.name,":",uv.value)
FROM users_groups ug
INNER JOIN groups_fields gf
ON gf.idgroup=ug.idgroup
INNER JOIN fields f
ON f.idfield=gf.idfield
INNER JOIN users_values uv
ON uv.idfield=gf.idfield
WHERE ug.iduser=$iduser

Что ещё надо? Поиск? 
Положим, надо найти всей юзерей, входящих в группу $idgroup, у которых свойство $idfield равно значению $value
Код

SELECT u.iduser,u.name,u.login
FROM users_groups ug
INNER JOIN groups_fields gf
ON gf.idgroup=us.idgroup
INNER JOIN users_values uv
ON uv.idfield=gf.idfield AND uv.iduser=ug.iduser
WHERE ug.idgroup=$idgroup AND gf.idfield=$idfield AND uv.vlue=$value

Чего ещё может потребоваться?

Добавлено @ 14:55 
Цитата(Kirill Baranov @  17.8.2006,  13:47 Найти цитируемый пост)
да про возможности уже сомнения развеялись

наверное, и такой подход не идеален... однако вполне удобоварим smile
А касательно языка - непонятно, как ты в одной записи в, скажем, fields, забьёшь названия на 5-7 языках. Это же связь один-ко-многим. Тут нужна отдельная таблица, иначе при работе хлопот не оберёшься...

Добавлено @ 14:57 
поищи информацию про нормализацию и нормальные формы. в очень некоторых случаях можно отступить от следования нормальным формам(один случай на тысячу случается, наверное), однако почти всегда следование им сильно(очень сильно) облегчает жизнь тому, кто будет разработанную структуру использовать...
PM MAIL   Вверх
Kirill Baranov
Дата 17.8.2006, 15:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 242
Регистрация: 30.6.2004

Репутация: -2
Всего: -2



Спасибо большое) Буду еще думать как делать) Ведь идеала все равно не добиться, а тебе плюс
PM MAIL   Вверх
skyboy
Дата 17.8.2006, 15:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 75
Всего: 260



Цитата(Kirill Baranov @  17.8.2006,  14:08 Найти цитируемый пост)
Буду еще думать как делать

будут ещё вопросы - обращайся. как раз сейчас над CMS работаю... Только до авторизации ещё не добрался smile

Добавлено @ 15:14 
Цитата(Kirill Baranov @  17.8.2006,  14:08 Найти цитируемый пост)
Ведь идеала все равно не добиться

а идеала нет, потому идостичь его невозможно.
зы А ты ещё права прикрути группам.... На запись, удаление, изменение... 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0582 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.