2010-12-27 5 views
7

У меня есть настройки для пользователя около 200 настроек, к ним относятся настройки уведомлений и параметры отслеживания от действий пользователя на объектах. Проблема в том, как сохранить его в БД? Должны ли каждая настройка быть строкой или столбцом? Если colunm тогда таблица будет иметь 200 колоний. Если строка, то около 3 колонок, но 200 строк на пользователя x даже 10 миллионов пользователей = не хорошо.Сохранение пользовательских настроек в таблице - как?

Так как же я могу сохранить все эти настройки? ПРИМЕЧАНИЕ. Эти параметры представляют собой сочетание ввода текста и поиска FK с другими таблицами.

Спасибо.

+0

Если вам не нужно искать в каком-либо поле, вы можете сериализовать и сохранить их все в одном текстовом поле. Для меня создание столбца для каждого поля в порядке. Чтобы улучшить поиск/выбор, вы можете разбить их на несколько таблиц, например user_profile, user_inteface_settings, user _... (таблицы, которые могут использоваться независимо). - Создание общей таблицы, содержащей настройки: один для каждой строки (uid, field, value) полезен, если у вас есть много дополнительных полей и может привести к таблице 200 * 10 000 000 = 2 000 000 000 строк. –

+1

Mdillion - просто чтобы напомнить вам, вы должны «принять» ответ, который вам больше всего помог. –

+0

Моя проблема все еще не решена. Есть так много настроек, и оба способа, упомянутые здесь, работают некорректно. Поэтому я изучаю некоторые другие варианты, и как только я нахожу что-то, я приму самый близкий ответ. – Mdillion

ответ

3

Что у вас есть 200 настроек для отслеживания, предлагает гибкую схему базы данных. Поэтому я хотел бы предложить гибридный подход:

  1. Пользователи: таблицу с строкой для каждого пользователя для свойств, которые пользователь, вероятно, всегда будет иметь, например, имя пользователя и пароль. В этой таблице также могут храниться внешние ключи, но это эвристика, а также зависит от отношения нуля от нуля или от нуля до многих. Если последний требует отдельной таблицы.
  2. Особенности: два варианта
    1. стол с ряда на функции, эффективно Hashtable, с USERID, имя и значение столбцов. Это также может быть местом для внешних отношений, но вы не сможете обеспечить целостность данных в этой настройке.
    2. XML, но только с базой данных, которая имеет функции, позволяющие запрашивать данные или только данные, которые вам не нужны, но работают только на вашем сервере приложений.

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

+0

Что такое время чтения, если таблица скажет 10 миллионов строк, и вам нужно найти 200 настроек для загрузки пользователем страницы настроек? Будет ли пользователь видеть страницу мгновенно или займет минутку для поиска и загрузки страницы пользователя? – Mdillion

+0

При правильных индексах время чтения должно быть хорошим. Было отмечено, что я предлагаю загружать информацию один раз при входе в систему как часть сеанса пользователя вместо повторных попыток базы данных каждый раз, когда требуется проверка разрешений. – orangepips

2

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

Можете ли вы попробовать XML для всех этих 200 настроек, а затем у вас будет только 1 строка на пользователя. имя пользователя и соответствующие настройки xml. Но опять же это ограничит ваши возможности запросов, но теперь базы данных поддерживают XML. Вы можете специально проверить XML-базы данных.

+0

Можете ли вы поместить FK в XML? – Mdillion

+0

Я не уверен в деталях, но это можно сделать. Прочтите это: http://www.stylusstudio.com/xsllist/200205/post70200.html http://msdn.microsoft.com/en-us/library/ms345117(v=sql.90).aspx –

4

Сериализация данных почти всегда оказывается плохой идеей, потому что при этом вы наносите ущерб dbms. Все человеческие годы, которые вступили в создание эффективных dbms, будут потрачены впустую на сериализованном ведре бит.

Если у вас есть логика приложения подключили к каждой настройки, я думаю, вы должны реализовать его либо как:

1 колонка за настройки в таблице настроек. Это упрощает использование мощности ваших dbms, проверку ограничений, ссылочную целостность, правильный тип данных для ваших значений, большое количество информации для оптимизатора. Недостатком является то, что размер строки растет.

или

1 таблица на установке (или группы соответствующих настроек). Это имеет все преимущества вышеперечисленного, но торгует с помощью рядов для штрафа за производительность, когда вам нужно получить большинство или все настройки за один раз.Если параметры не являются обязательными, эта альтернатива будет значительно меньше, если фактические данные разрежены.

Кроме того, множество столбцов часто является «запахом», что предполагает, что вы не нормализировали свои данные правильно, но это не обязательно должно быть так. Только вы знаете свои данные.

+0

Лоты из-за «уровней конфиденциальности на активность пользователя». Каждое действие пользователя имеет определенный пользователем уровень конфиденциальности, а система конфиденциальности - по умолчанию. Для настройки системы это нормально, но пользовательские настройки выходят из-под контроля, когда у нас есть 200 действий каждый со своей настройкой. – Mdillion

Смежные вопросы