Буду признателен за некоторые мнения по поводу моей проблемы.
В моей базе данных есть таблица [User] с базовыми данными, которые вы ожидаете, такими как имя пользователя, пароль и т. Д. *
Это приложение требует, чтобы я отслеживал огромное количество атрибутов для каждого пользователя. Настолько, что мне, скорее всего, не хватит столбцов (места для хранения строк).
Я испытываю желание добавить таблицу UserProperties со столбцами UserID, PropertyKey и PropertyValue. Такой подход хорошо согласуется с требованиями.
Меня беспокоит то, что если у каждого пользователя, скажем, 100 свойств, когда в базе данных миллион пользователей, у нас будет 100 000 000 строк свойств.
Я думаю, что при использовании кластеризованного индекса для идентификатора пользователя этот доступ будет по-прежнему быстрым, и вы действительно сохраняете примерно тот же объем данных, что и при использовании метода мега-столбцов.
Есть идеи или мысли по поводу производительности? Идеи для лучшего дизайна БД?
Спасибо!
UPDATE:
Во-первых, большое спасибо за все отличные ответы!
Я возился с возможностями, и одна вещь продолжает беспокоить меня. Мне нужно довольно часто запрашивать некоторые из этих атрибутов, и, что еще хуже, эти запросы могут включать поиск всех пользователей, которые соответствуют критериям по 10 из этих атрибутов одновременно.
В результате я теперь склоняюсь к подходу с мегаболлями, но, возможно, разделю данные на одну (или более) отдельные таблицы, образуя отношение один к одному, привязанное к идентификатору пользователя.
Я использую LinqToSql, и хотя я думаю, что таблицы с таким количеством столбцов неэлегатны, я думаю, что учитывая все проблемы и компромиссы, это, вероятно, правильный, но я все еще хочу услышать другие мнения.