Дизайн таблицы пользователей базы данных, для конкретного сценария
Я знаю, что на этот вопрос задавали и отвечали много раз, и я потратил приличное количество времени на чтение следующих вопросов:
- Структура таблицы базы данных для пользовательских настроек
- Как обработать несколько десятков флагов в базе данных
- Хранение флагов в БД
- Сколько столбцов таблицы базы данных слишком много?
- Сколько столбцов слишком много столбцов?
Проблема в том, что, похоже, существует несколько равномерное распределение сторонников для нескольких классов решений:
- Вставьте пользовательские настройки в одну таблицу, пока она нормализуется
- Разделите его на две таблицы с номерами от 1 до 1, например "users" и "user_settings"
- Обобщите это с помощью некоторой системы ключ-значение
- Придерживайтесь флагов установки в битовом поле или другой сериализованной форме
Поэтому, рискуя задать повторяющийся вопрос, я бы хотел описать свой конкретный сценарий и, надеюсь, получить более конкретный ответ.
В настоящее время мой сайт имеет одну пользовательскую таблицу в MySQL, около 10-15 столбцов (идентификатор, имя, адрес электронной почты, пароль...)
Я хотел бы добавить набор настроек для каждого пользователя для отправки уведомлений по электронной почте для различных типов событий (notify_if_user_follows_me, notify_if_user_messages_me, notify_when_friend_posts_new_stuff...)
Я ожидаю, что в будущем я буду редко добавлять по одному индивидуальным настройкам, которые в основном составляют 1: 1 для пользователей.
Я склоняюсь к созданию второй таблицы user_settings и вставляю туда "несущественную" информацию, такую как настройки уведомлений по электронной почте, для того, чтобы сделать основной пользовательский стол более читабельным, но очень любопытно услышать, что ожидают сказать.
2 ответа
Кажется, ваша дилемма состоит в том, чтобы разделить пользовательскую таблицу по вертикали или нет. Вы можете также прочитать это SO Q/A.
Я собираюсь отдать свой голос за добавление двух таблиц... (некоторая система значений ключей sota)
предпочтительнее (для меня) добавлять данные вместо столбцов... так что,
добавить новую таблицу, которая связывает пользователей с настройками, а затем добавить таблицу для настроек...
эти вещи: notify_if_user_follows_me, notify_if_user_messages_me, notify_when_friend_posts_new_stuff. станет вставкой строк с идентификатором, и вы можете ссылаться на них в любое время и расширять их по мере необходимости, не меняя схему.