我应该为 dual-role 用户保留一个或两个唯一 ID 吗?

Should I maintain one or two unique IDs for a dual-role user?

抱歉,如果我无法在标题中准确描述问题。我的场景如下。

我的网站作为连接供应商和买家的平台运行。供应商列出他们可用的 goods/services,买家可以从他们那里购买 goods/services。

新买家(用户)注册非常简单,因为他们的信息存储在 users table 中(users, user_profile, user_history 等),并与唯一的 user_id 捆绑在一起.我现在难以理解的是,我还要求供应商注册(用于验证目的),并且供应商也可以是买家。

我的userstable是这样的:

user_id  <--- primary key
name
email
...

和相关的 table 可能如下所示:

transaction_id
user_id  <--- foreign key
date
amount
...

我对 vendors table 的初步想法:

vendor_id   <--- primary key
user_id  <--- foreign key
vending_name
registration_number
...

和一个相关的 table:

product_id
vendor_id  <--- foreign key
name
price
...

我的问题是,最好将 vendor_id 到 link 放在所有 vendor-related table 中,还是我应该坚持使用 user_id 一切?

谢谢。

视情况而定。

想想这个场景,用户是否可以成为供应商(反之亦然?)如果是这样,那么最好围绕基本用户规划数据模型并添加属性或标志(在单独的 table 或字段)。这样,您就可以获得add/remove权限。

即有一个单独的 table 称为 "flags" "flagmappings"

//flags
flag_name <--- 'Vendor', 'User'

//flagmappings
user_id  <--- foreign key
flag_id  <--- foreign key

这种结构给你带来了一些好处:

  • 对于任何给定的用户,您可以搜索标志映射,然后确定用户可能拥有的权限。
  • 所有 login/authentication 逻辑对于所有 users/vendors 都是相同的(即如果是供应商或用户,所有基本信息都在同一个地方)。
  • 如果用户需要成为供应商,反之亦然,您只需将该标志添加到用户即可。
  • 如果您需要创建另一种类型的用户(即管理员、经理等),它只是标志中的另一个条目 table。

如果我是你,我会坚持使用用户 table 的所有内容(只要你没有大量特定于供应商的字段)。它只是让事情变得更干净。然后,您可能在用户 table.

中有一个 'is_vendor' 字段

或者,如果您想更复杂一些,您可以使用如下方式实现角色:

users Table
id
firstname
etc...

groups Table
id
title
etc.

user_groups Table
user_id
group_id

就我个人而言,我会选择第二个选项,因为它允许更多基于角色的权限,例如管理员、编辑、版主、买家、卖家、超级买家、超级卖家等