Консолидация таблиц с отношениями один-к-одному

У меня есть 3 таблицы MySQL для системы членства.

  • users: Минимальные требования, чтобы быть пользователем, связанные только с информацией об аккаунте (email, пароль, is_activated, etc)
  • user_profiles: Личная информация, предоставленная пользователем (имя, адрес, телефон...)
  • user_member_profiles: Информация, строго управляемая администраторами (оплаченный регистрационный взнос, посещенные встречи и т.д.)

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

Вариант 1: Оставить все как есть и продолжать делать JOINы и утомительные UPDATEы (эта часть данных идет в эту таблицу, эта часть идет в другую и т.д.). Больше работы для меня, но, возможно, это имеет больше смысла?

Вариант 2: Объединить все в одну таблицу.

Я бы предположил, что использование одной таблицы будет быстрее, не нужно объединять таблицы. Может быть, это зависит от данных? Каждая таблица имеет около 12-20 полей, поэтому объединенная таблица будет большой.

Каждый пользователь имеет не более 1 профиля из каждой таблицы, но может и не иметь профиля вообще (или иметь только 1 общий).

Чтобы добавить немного контекста к этому: Это для постоянно развивающейся CMS, написанной на PHP, и мне нужно будет вносить изменения в таблицы для каждой установки. Администраторам нужно управлять пользователями в форме speadsheet, поэтому я буду выбирать до 200 пользователей за раз.

Каков правильный подход к этому с точки зрения производительности, дизайна или организации?

6
задан Wesley Murch 28 April 2011 в 05:56
поделиться