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