首页 > 解决方案 > 我应该如何处理数据库中两种不同类型的用户?

问题描述

我正在构建一个具有两种不同类型用户的电子商务应用程序,即购物用户和供应商/品牌用户。

我应该为每个用户制作两张桌子吗?

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...

标签: postgresqldatabase-design

解决方案


这是一个尝试在关系数据库中对面向对象的继承概念进行建模的示例。如果您搜索该术语,您会在 Stack Overflow 上找到几个答案。

就您而言,我认为您有 3 个逻辑实体:

  • 用户:电子邮件、密码、用户名、地址...
  • 客户(是一种用户):StripeID
  • 供应商(是用户的一种):运费,条带令牌

如何将这些逻辑实体建模为数据库中的物理对象主要是一个权衡问题 - 其他答案解释了这些。

认为“客户”和“供应商”之间的行为和属性都会有显着差异。

我还假设您的数据模型会随着时间的推移而发展 - 例如,您可能需要为每个用户存储多个地址(运输、计费),您可能对“客户”有不同的生命周期(新的、注册的、已确认的注册、付款确认)和“供应商”(新的、批准的、拒绝的)。

如果这些事情是真的,我会硬着头皮吃两张桌子,customer然后vendor。这意味着您可以更轻松地发展他们的行为 - 您不必担心在两个“客户”和“供应商”之间需要稍微不同的地址逻辑,您只需构建您需要的内容。您的模式更加不言自明-您的外键转到说明它们做什么的表(产品->供应商,而不是产品->用户)。


推荐阅读