Php, mySQL. Дополнительные произвольные поля

R
На сайте с 18.12.2009
Offline
92
1085

Здравствуйте. Имеется база данных пользователей. Пример: `id`, `name`, `group_id`.

Необходимо организовать возможность добавления произвольных дополнительных полей. Данную возможность я встречал только в DLE или MODx, точно не помню. Причем полям необходимо будет указывать параметры (обязательное/необязательное).

Помогите, пожалуйста, разобраться с теоретическим принципом данный реализации.

Я вижу это так - у пользователя создается еще 1 поле, например, `other` типа TEXT, в котором параметры будут хранится в формате JSON.

Быть может Вы сталкивались с данной реализацией и можете помочь советом?

siv1987
На сайте с 02.04.2009
Offline
427
#1

Вариант - создаете еще одно поле в таблице и храните там все поля в каком-то сериализованном виде.

Другой вариант - отдельная таблица. Новое доп поле, создается новое поле в таблице. Связь например id пользователя.

R
На сайте с 18.12.2009
Offline
92
#2

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

Например, добавляю поле `возраст` - и оно появляется в форме добавления/редактировании пользователя.

siv1987
На сайте с 02.04.2009
Offline
427
#3
rerighter:
Проблема в том, что необходимо изначально задавать также эти поля где-то, чтобы они появились у каждого пользователя в доп. полях.
Например, добавляю поле `возраст` - и оно появляется в форме добавления/редактировании пользователя.

У пользователя в настройках/личном кабинете (или при регистрации) будет возможность заполнять эти поля - заполнит, они будут появляться, не заполнит - останутся пустыми. Естественно отдельно у вас отдельная таблица с названием/настройками всех полей.

IL
На сайте с 20.04.2007
Offline
435
#4
siv1987:
Другой вариант - отдельная таблица. Новое доп поле, создается новое поле в таблице. Связь например id пользователя.

Ещё вариант - по таблице на каждое поле.. при этом значение поля соответствует указанному типу (int|char ...)

+ таблица на ревизии (историю изменения значений) также на каждое поле..

rerighter, погуглите EAV

... :) Облачные серверы от RegRu - промокод 3F85-3D10-806D-7224 ( http://levik.info/regru )
[Удален]
#5

Советую изучить связку wp_posts и wp_postmeta в БД вордпрес.

Смысл в том, что в wp_posts задаётся 1 доп. индексное значение. В wp_postmeta оно дублируется и заносятся различного типа данные, а в нужный момент по этому индексному значению всё выцепливается:).

Dreammaker
На сайте с 20.04.2006
Offline
569
#6
ivan-lev:
погуглите EAV

Первоначально тоже думали использовать на проекте, но потом решили использовать MongoDB для хранения произвольных полей. Через некоторое время и весь проект перевели на связку MongoDB + Sphinx.

У монго есть свои недостатки, но NoSQL-решения для таких все же более предназначены.

IL
На сайте с 20.04.2007
Offline
435
#7
Dreammaker:
У монго есть свои недостатки, но NoSQL-решения для таких все же более предназначены.

Один из недостатков - не у каждого хостера найдёшь.. :) А в целом - штука удобная. Один шардинг-из-коробки чего стоит...

Dreammaker
На сайте с 20.04.2006
Offline
569
#8
ivan-lev:
не у каждого хостера найдёшь.

это да. Но если проект свой, то это всегда можно взять ВДС, но тут уже выплывает другой момент - чем больше памяти тем для монги лучше :)

второй недостаток - монго лочит всю базу при записи. Обещают, что возможно будет подокументный лок к 2.6, но когда эта версия выйдет непонятно, точно не к концу этого года.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий