Я занимаюсь разработкой мультимагазинной платформы электронной коммерции Restful api.
Я застрял в дизайне таблицы пользователей.
Пользователи платформы имеют 3 разные роли: администратор, клиент и продавец.
Администратор просто имеет имя пользователя, пароль, поля электронной почты.
У торговых пользователей есть дополнительные поля, в которые входят поля комиссии, activeStates (сводная таблица между состояниями и продавцами), addressDetails, taxNumber, city_id, state_id.
У пользователей-клиентов есть дополнительные поля, которые содержат такс: taxNumber, cart_Id, addressDetails, city_id, state_id. Я нашел 2 способа реализации этих таблиц.
Способ 1
3 разных таблицы, таких как Admin, Customer, Merchant.
Admin Table;
id
username
name
password
email
passwordResetToken
resetTokenExpireTime
Customer Tabe;
id
username
name
password
email
passwordResetToken
resetTokenExpireTime
cart_id
city_id
state_id
addressDetails
taxNumber
Merchant Table;
id
username
name
password
email
passwordResetToken
resetTokenExpireTime
city_id
state_id
addressDetails
taxNumber
commission
Way 2
Только пользовательский стол и за дополнительную плату поля Merchant, таблицы клиентов.
таблица пользователей;
id
username
name
password
email
passwordResetToken
resetTokenExpireTime
таблица клиентов;
cart_id
city_id
state_id
addressDetails
taxNumber
user_id
таблица торговцев;
city_id
state_id
addressDetails
taxNumber
commission
user_id
способ 1 Преимущества
- Достаточно одной конечной точки входа для всех пользователей, вошедших на платформу.
- Достаточно только одного метода создания JWT токена. Dynami c конечные точки на основе ролей
Недостатки способа 1
- Мне нужно создать дополнительный запрос одного покупателя или торгового пользователя.
- Например; Пользователь покупателя добавляет к товару свою корзину, затем я сначала должен найти пользователя и найти покупателя, затем найти корзину покупателя и добавить товар в корзину.
- Если продавец хочет обновить свой продукт, то сначала я должен найти пользователя и найти продавца по пользователю, затем найти продукт по идентификатору и пользователю.
Преимущества Way 2
- Мне не нужно создавать дополнительный запрос для клиентов или пользователей торговых предприятий. Если пользователь покупателя добавил в свою корзину, я нашел клиента непосредственно из таблицы покупателя. Мне не нужно искать пользователя перед покупателем.
Недостатки способа 2
- Необходимы 3 разные конечные точки входа для пользователей.
- Жестко запрограммированная роль - основанные конечные точки
- Для создания токена JWT нужен 3 разных метода, потому что пользователи не связаны.
- Дополнительная таблица в базе данных
Итак, мне нужно посоветовать этот дизайн базы данных , Какой из способов, которые я нашел, лучше, или у вас есть другой совет из этого 2 способа.