Я добавляю новую функцию в свой пользовательский модуль для своей CMS, и я столкнулся с препятствием ... Или, я думаю, развилкой, и я хотел бы получить некоторые мнения от stackoverflow, прежде чем я фиксируюк чему-либо.
По сути, я хочу позволить администраторам добавлять новые, «дополнительные» пользовательские поля, которые пользователи могут заполнять при регистрации, редактировать в своем профиле и / или управлять другими модулями.Примером этого может быть поле дня рождения, длинное описание себя или, возможно, баллы, заработанные пользователем на сайте.Излишне говорить, что хранимые данные будут варьироваться и могут варьироваться от большого количества текста до небольшого целочисленного значения.Что еще хуже - я хочу, чтобы была возможность поиска по этим данным.
С учетом этого - что будет лучшим способом сделать это?Прямо сейчас я склоняюсь к тому, чтобы иметь таблицу со следующими столбцами.
userid, refFieldID, varchar, tinyint, smallint, int, text, date, datetime, etc.
Я бы предпочел это, поскольку это сделало бы поиск значительно быстрее, и справочную таблицу (которая содержит все данные поля, такие какв качестве имени поля, независимо от того, доступно ли оно для поиска и т. д.), какой столбец следует использовать при хранении данных для этого поля.
Другая идея, предложенная мне, и я виделиспользуется в других решениях (vBulletin - одно из них, хотя я видел других, чьи имена в настоящий момент меня избегают), где у вас есть только идентификатор пользователя, ссылочный идентификатор и поле медтекста.Я не знаю достаточно о MySQL, чтобы с уверенностью сказать это, но этот метод выглядит так, что поиск будет медленнее и, возможно, будет иметь большие издержки.
Итак, какой метод будет «лучшим»?Есть ли другой метод, который мне не хватает?Какой бы метод я ни использовал в конечном итоге, он должен быть быстрым для поиска, а не массовым (незначительные накладные расходы вполне приемлемы) и предпочтительно разрешать сложные запросы, применяемые к данным.