我应该如何处理数据库中两种不同类型的用户?

时间:2019-05-08 09:28:37

标签: postgresql database-design

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

我应该为每个用户创建两个表吗?

<input ng-model="required" id="required" />

或者我应该这样:

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

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

2 个答案:

答案 0 :(得分:1)

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

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

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

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

假设“客户”和“供应商”之间的行为和属性都将存在显着差异。

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

如果那些事情是对的,那我就硬着头皮,有2张桌子,customervendor。这意味着您可以更轻松地发展他们的行为-您不必担心两个“客户”和“供应商”之间需要稍微不同的地址逻辑,而只需构建所需的内容。您的架构更加不言自明-外键进入表中说明其功能(产品->供应商,而不是产品->用户)。

答案 1 :(得分:0)

它不应该是两个表,而是三个:D

 1. users (id, name, password, )
 2. customers (user_id, customer_specific_fields)
 3. vendors (user_id, vendor_specific_fields)