База данных платных пользователей и пробных пользователей в одной таблице - PullRequest
1 голос
/ 19 ноября 2010

Если бы вам пришлось создавать базу данных с платными и пробными пользователями, вы бы поместили их в одну таблицу и провели различие между ними с помощью поля? Или вы бы поместили их в две отдельные таблицы?

Или вы сделаете все возможное из обоих миров и поместите их в одну таблицу, но создадите два представления 1) PaidUsers и 2) TrialUsers

Спасибо!

Ответы [ 3 ]

1 голос
/ 19 ноября 2010

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

В однопользовательском запросе (например, проверка входа в систему или получение данных для одного пользователя) между этими двумя стратегиями нет существенных различий.

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

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


Чтоесли вам нужны оба сценария?Что ж, я думаю, что это был бы случай, когда некоторые общие атрибуты существуют между двумя типами пользователей.

Эти общие атрибуты должны быть помещены в одну таблицу, а выделенные атрибуты для конкретных пользователей должны быть помещены в 'таблицуПроисходит от прежнего стола.Как сказал фон Петрушев.

0 голосов
/ 19 ноября 2010

Поскольку ваши платные пользователи, вероятно, будут связаны с некоторыми дополнительными данными, но при этом будут иметь тот же набор полей, что и неоплаченные, правильный способ сделать это - [is-a] подход:

Пользователь Я быимя пользователяпарольФИО...

Paiduser user_id [fk->User::id]account_id....[другие дополнительные данные]

РЕДАКТИРОВАТЬ : Теперь пробные пользователи будут все записи в User, которые не имеют записи в Paiduser.Я предполагаю, что набор полей Paiduser является надмножеством набора полей пробного / обычного пользователя [Пользователь].

РЕДАКТИРОВАТЬ 2 : Чтобы получить список пробных пользователей, для которых «установлена ​​разница» между User и Paiduser, должен работать следующий sql:

select u.*
from (User as u
      join Paiduser as p on u.id<>p.user_id)
0 голосов
/ 19 ноября 2010

Лучшее решение может зависеть от типа базы данных. Мой опыт работы с MySQL и SQL Server. Я всегда помещал всех пользователей в одну таблицу. Затем дифференцируйте по мере необходимости, используя поля. Это может относиться к платным / неоплачиваемым или что-либо еще. Это решение соответствует стандартам 3NF, и мне кажется, что его легче обслуживать и т. Д. Какова причина использования нескольких таблиц?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...