Как мне обращаться с двумя разными типами пользователей в базе данных? - PullRequest
0 голосов
/ 08 мая 2019

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

Должен ли я сделать две таблицы для каждого пользователя, как?

User| id, email, password, username, address, stripeCustomerId

Brands| id, email, password, username/brandName, shippingRate, address, stripeAccessToken etc. 

Или я должен сделать так:

Users| id, email, password, username, address, stripeCustomerId

Brands| userid, etc...

Ответы [ 2 ]

1 голос
/ 08 мая 2019

Это пример попытки моделировать объектно-ориентированное понятие наследования в реляционной базе данных.Если вы ищете этот термин, вы найдете несколько ответов в переполнении стека.

В вашем случае, я думаю, у вас есть 3 логических объекта:

  • Пользователь: электронная почта, пароль, имя пользователя, адрес ...
  • Клиент (это тип пользователя): StripeID
  • Поставщик (это тип пользователя): стоимость доставки, токен полосы

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

I Предположим, будут существенные различия как в поведении, так и в атрибутах между "клиентом" и "продавцом".

Я также Предположим, Ваша модель данных со временем будет развиваться - например, вам, вероятно, нужно хранить более одного адреса для каждого пользователя (доставка, выставление счетов), у вас, вероятно, разные жизненные циклы для«клиенты» (новые, зарегистрированные, регистрация подтверждена, оплата подтверждена) и «поставщики» (новые, утвержденные, отклоненные).

Если все это правда, я просто укушу пулю и получу 2 таблицы,customer и vendor.Это означает, что вы можете легче развивать их поведение - вам не нужно беспокоиться о необходимости немного отличаться адресной логикой между двумя «клиентом» и «продавцом», вы просто создаете то, что вам нужно.Ваша схема немного более понятна - ваши внешние ключи идут в таблицы, в которых указано, что они делают (продукты -> поставщики, а не продукты -> пользователи).

0 голосов
/ 09 мая 2019

Это должны быть не две таблицы, а три: D

 1. users (id, name, password, )
 2. customers (user_id, customer_specific_fields)
 3. vendors (user_id, vendor_specific_fields)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...