2011-11-23 3 views
1

У меня возник вопрос о наилучшем способе обработки данных такого типа.Дизайн объектной модели

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

пользователей

счетов

& users_accounts

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

ответ

1

Могу ли я предположить, что у одной учетной записи не может быть более одного пользователя (отношение «один ко многим»)? В этом случае две таблицы будет достаточно:

  • users
  • accounts

Где accounts содержит ссылку на идентификатор пользователя. Отдельная таблица отношений будет излишней, если отношения «многие-ко-многим» отсутствуют.

Тогда возникает вопрос: может ли пользователь иметь как оплаченные, так и неоплаченные счета? Если это так, флаг принадлежит accounts. В противном случае он относится к users.


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

  • Платный пользователь имеет дополнительную функциональность во всех учетных записях? Тогда флаг принадлежит users.
  • У любого пользователя есть дополнительные функции в платной учетной записи? Затем флаг принадлежит accounts.
  • Будет ли платный пользователь иметь дополнительную функциональность только в платных аккаунтах? Затем флаг принадлежит users_accounts.

Если каждый счет имеет только один владельца, то вы должны поместить идентификатор пользователя, представляющий владелец в accounts таблицы.

+0

Извините, я думаю, я не уточнил. У каждой учетной записи также будет много пользователей. – ThinkingInBits

+0

У пользователя не было бы уплаченного и неоплаченного сальдо счета, но они были бы «владельцем учетной записи», так сказать, или «членом учетной записи» – ThinkingInBits

+0

В этом случае я сохранил бы флаг в таблице учетных записей. Если учетная запись оплачивается, все пользователи оплачиваются, не так ли? –

0

Users таблица будет иметь только связанные пользовательские данные ... имя, фамилию, и т.д. ... accounts будет иметь информацию о счетах ... типа и любых других данных ...

Ключ заключается в том, что users_accounts является таблицей отношений между Users и accounts, поэтому он будет иметь любые данные привязки от Users до accounts, и ТАМ вы должны поставить флаг, потому что он установлен, когда вы устанавливаете отношения.

+0

там, как в таблице users_accounts? – ThinkingInBits

+0

Я запутался в именах таблиц ... users_accounts - это реляционная таблица, и там вы должны поместить флаг ... Структура должна выглядеть примерно так: 'id - id_users - id_accounts - flag' – admin

0

Добавить paid flag to user_account.

Пример Атрибуты:

  • user (id, name, street ...)
  • account (id, name ...)
  • user_account (user_id, account_id, paid)

Вы можете сказать по paid столбца, если пользователь является членом премиум аккаунт или нет.

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