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