postgresql - 我应该如何处理数据库中两种不同类型的用户?
问题描述
我正在构建一个具有两种不同类型用户的电子商务应用程序,即购物用户和供应商/品牌用户。
我应该为每个用户制作两张桌子吗?
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...
解决方案
这是一个尝试在关系数据库中对面向对象的继承概念进行建模的示例。如果您搜索该术语,您会在 Stack Overflow 上找到几个答案。
就您而言,我认为您有 3 个逻辑实体:
- 用户:电子邮件、密码、用户名、地址...
- 客户(是一种用户):StripeID
- 供应商(是用户的一种):运费,条带令牌
如何将这些逻辑实体建模为数据库中的物理对象主要是一个权衡问题 - 其他答案解释了这些。
我认为“客户”和“供应商”之间的行为和属性都会有显着差异。
我还假设您的数据模型会随着时间的推移而发展 - 例如,您可能需要为每个用户存储多个地址(运输、计费),您可能对“客户”有不同的生命周期(新的、注册的、已确认的注册、付款确认)和“供应商”(新的、批准的、拒绝的)。
如果这些事情是真的,我会硬着头皮吃两张桌子,customer
然后vendor
。这意味着您可以更轻松地发展他们的行为 - 您不必担心在两个“客户”和“供应商”之间需要稍微不同的地址逻辑,您只需构建您需要的内容。您的模式更加不言自明-您的外键转到说明它们做什么的表(产品->供应商,而不是产品->用户)。
推荐阅读
- javascript - JQuery .hover() 和 .bind() 试图控制动画行为
- ios - swift:如何在 switch case 语句中替换 if else
- r - 创建具有 m 个级别的 n 个元素的所有可能组合
- javafx - 为什么在 TextFormatter 中没有调用 toString?
- python - 与 pandas 的近似连接
- javascript - 为什么 JavaScript 函数文档在函数之外?
- python - ImportError:没有名为 Include 的模块
- php - 如何从php中的文本文件中提取特定文本?
- google-cloud-vision - 谷歌云视觉 api 快速入门错误打开文件
- javascript - 将变量或属性值传递给 JavaScript 对象中的方法会返回“未定义”