Поставщик профиля использует EAV (Entity-Attribute-Value) дизайн намеренно, потому что профили в целом очень обычно имеют малонаселенную схему, т. е. существует много потенциальных атрибутов, но лишь немногие будут использоваться для данного единого объекта, а некоторые из них будут широко варьироваться от одного объекта к другому.
Давайте использовать совершенно произвольный пример - допустим, только один из десяти ваших пользователей хочет предоставить свой возраст. Сделать столбцы теперь больше похоже на отходы, нет?
Но что делать, если ваше заявление делает возраст обязательным? Хорошо, этот столбец заполняется для всех. Но что, если вам нужно сделать заметку в профиле, «пользователь больше не хочет видеть этот неясный диалог». Вам действительно нужен столбец для каждого отдельного диалога в вашем приложении, хочет ли пользователь его увидеть? Возможно нет. Когда вы попадаете в маленькие разовые детали применения любого значительного объема, EAV фактически становится более экономичным выбором.
В целом он очень хорошо масштабируется (гораздо лучше, чем вы, вероятно, думаете). В конкретном случае это не имеет значения - как всегда, используйте то, что работает и исправляет проблемы с производительностью , когда они появляются. Независимо от ограничений масштабируемости провайдера профиля, вы узнаете, когда их ударили. Я гарантирую две вещи: (1) вам придется исправить множество других проблем с производительностью, которых вы не ожидали, прежде чем исправлять это; и (2) если ваш сайт получает достаточно трафика, чтобы разорвать поставщика профилей, это хорошая проблема.
@progtick Я предполагаю, что вы перерегистрировались, потому что вы не можете получить доступ к учетной записи, которую вы использовали для публикации вопроса ... перейдите по адресу http://meta.stackoverflow.com и попросите их объединить свои аккаунты. Это облегчит обсуждение вопросов и разъяснений. –
Я не мог этого сделать, потому что это, видимо, не воспринимает мой OpenId. – TPR
@progtick, чтобы ответить на ваш вопрос, если у вас уже есть схема базы данных, может возникнуть смысл создать собственного поставщика, который использует это. Тем не менее, создание чего-то одного столбца не делает его обязательным - оно уже должно выполняться вашей логикой приложения. Как он хранится в базе данных, это не влияет на то, требуется ли это. –