В этом случае, похоже, что у пользователей может быть один большой аватар и один маленький аватар, так почему бы не сделать эти столбцы в пользовательской таблице?
У нас есть похожий тип таблиц в работе, который, вероятно, начинался с благих намерений, но теперь это большая головная боль, чтобы иметь делоЭто потому, что теперь у него есть сотни различных «MetaKeys», и нет хорошей документации о том, что разрешено и что делает каждый.Вы должны посмотреть, как каждый из них используется в коде, и выяснить это оттуда.Таким образом, выясните, как вы будете документировать это для будущих разработчиков, прежде чем идти по этому пути.
Кроме того, чтобы получить всю информацию о каждом пользователе, это уже не однострочный запрос, а n-рядный.запрос (где n - количество полей на пользователя).Кроме того, как только у вас есть эти данные, вы должны постобработать каждую из них на основе вашего мета-ключа, чтобы получить подробную информацию о вашем пользователе (что обычно оказывается большей частью усилий по разработке, потому что вы должны сделать кучуСтрунные сравнения).Далее, многие базы данных позволяют возвращать из запроса только определенное количество строк, и, таким образом, количество пользователей, которых вы можете получить за раз, делится на n.Наконец, упорядочение пользователей на основе информации, хранимой таким образом, будет намного сложнее и дороже.
В общем, я бы сказал, что вы должны создавать любые поля, которые имеют специализированную функциональность или требуют упорядочения, чтобы быть столбцами в вашей таблице.Так как они все равно потребуют усилий по разработке, вы можете также добавить их в качестве дополнительного столбца при их реализации.Я бы сказал, что ваши изображения аватара попадают в эту категорию, потому что у вас, вероятно, будет один из них, и вы всегда будете хотеть отображать большой в определенных местах и маленький в других.Однако, если вы хотите, чтобы пользователи могли создавать свои собственные поля, это было бы хорошим способом сделать это, хотя я бы сделал еще одну таблицу, к которой можно присоединиться из пользовательской таблицы.Ниже приведены таблицы, которые я бы предложил.Я предполагаю, что «Статус» и «Любимый цвет» являются пользовательскими полями, введенными пользователем 2:
User:
| Id | Name |Location | Website | avatarLarge | avatarSmall
----------------------------------------------------------------------
| 2 | iPityDaFu |Dallas, Tx | www.example.com | 124.png | 124_thumb.png
UserMeta:
Id | UserId | MetaKey | MetaValue
-----------------------------------------------
1 | 2 | Status | Hungry
2 | 2 | Favorite Color | Blue