Хранить много пользовательской информации в одной таблице MySQL? - PullRequest
2 голосов
/ 16 августа 2011

Я работаю над приложением, в котором каждый пользователь должен заполнить обширный профиль для себя.

Первая часть профиля пользователя состоит из примерно 25 полей общей информации

Следующий раздел профиля пользователя - это раздел, в котором они оценивают себя по заданному списку критериев. то есть «Оцените, насколько хорошо вы умеете готовить», а затем они отмечают радио-поле от одного до пяти, также есть флажок, который может проверить, «заинтересованы ли они» в деятельности / предмете, по которому они оценили себя.

Есть около 40 из них, по которым они оценивают себя.

Итак, мой вопрос: как хранить эту информацию, должны ли быть столбцы в моей таблице пользователей для каждого поля и элемента? Это было бы почти 70 полей

или я должен установить таблицу для user_profile и user_self_evaluation, и иметь там столбцы для каждого из них и иметь отношения один-один с пользователями?

Ответы [ 3 ]

2 голосов
/ 16 августа 2011

Используйте отдельные таблицы.Таким образом, когда вы обновляете только самооценку, вам не нужно обновлять таблицу user_profile.Идея здесь состоит в том, чтобы отделить часто обновляемые поля в другой таблице, оставляя редко обновляемые в другом месте.Если таблица стала большой, а имя пользователя / пароль находятся в отдельной таблице, то на производительность поиска по идентификатору пользователя / имени пользователя не повлияет большое количество запросов на обновление, и вы не отключите весь сайт, если вы изменитеТаблица self_evaluation.

Но если вы планируете добавить новые оценки, я бы предложил другой дизайн: таблица user_profile с таблицей из 25 полей профиля self_evaluations, с идентификатором и именем и любой метаинформацией о вопросе;с 1 записью на оценку user_profile_evaluation с идентификатором пользователя ,isionid, счетом, дополнительно - с одной записью для каждой оценки пользователя.

Таким образом, ваша схема будет намного более гибкой, и вам не нужно будет изменять таблицу, чтобы добавить еще одну оценку.

0 голосов
/ 16 августа 2011

или я должен настроить таблицу для user_profile и user_self_evaluation, и иметь там столбцы для каждого из них и иметь отношения один-один с пользователями?

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


Если вы думаете, что в будущем вы расширите оценки, то вы можете сделать это следующим образом:

user_self_evaluation таблица

user_id | evaluation_type | evaluation_value
1       | cooking         | 5
1       | singing         | 3
2       | cooking         | 2
2       | singing         | 5

Сделать объединенные столбцы (идентификатор_пользователя, тип_оценки, значение_значения) уникальными или первичными.

0 голосов
/ 16 августа 2011

Я думаю, что последний лучше, таблица с 70 столбцами действительно плохо выглядит и может стать еще хуже, если вы попытаетесь с ней справиться.

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

Допустим, у вас есть четыре вопроса с четырьмя вариантами ответа:

Вы можете сохранить их как 1433 в одном столбце под названием ответчики (первый вопрос - ответ 1, второй ответ 4, третий ответ 3, и последний, но не менее важный вопрос 4 - это ответ 3)

Просто даю вам несколько вариантов здесь.

Но если бы мне пришлось выбирать между отношениями один-одини 1 таблицу, я бы выбрал одно отношение, потому что потом легче управлять.

...