mysql - 我应该为双角色用户维护一两个唯一 ID 吗?

标签 mysql database laravel database-design relational-database

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

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

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

我的users表如下所示:

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

相关表格可能如下所示:

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

我对 vendors 表的最初想法:

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

和相关表格:

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

我的问题是,最好使用此 vendor_id 来链接所有与供应商相关的表,还是应该坚持使用 user_id 来处理所有内容?

谢谢。

最佳答案

这取决于。

考虑一下这种情况,用户是否可以成为供应商(反之亦然?)如果是这样,那么最好围绕基本用户规划数据模型并添加属性或标志(在单独的表或字段中)。这样,您就可以添加/删除权限。

即有一个名为“flags”“flagmappings”的单独表

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

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

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

  • 对于任何给定用户,您都可以搜索标志映射,然后确定用户可能拥有的权限。
  • 所有用户/供应商的所有登录/身份验证逻辑都是相同的(即,如果是供应商或用户,则不必拆分/特殊情况不同的表,所有基本信息都位于同一位置)。
  • 如果用户需要成为供应商,反之亦然,您只需将该标志添加到用户即可。
  • 如果您需要创建另一种类型的用户(即管理员、经理等),只需在标志表中添加另一个条目即可。

关于mysql - 我应该为双角色用户维护一两个唯一 ID 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31010815/

相关文章:

mysql - 当列存在时,为什么我会得到未知列?

php - 如何检查邮箱是否已经注册?

php - 如何在不使用 Markdown 的情况下将纯文本版本添加到 Laravel 电子邮件

PHP 显示为文本

php - 调用未定义的方法 BelongsTo::attach()

mysql - 如何从 table1 中选择 table1.id 存在于 table2 的 id 列中的记录?

php - 使用 if.. 语句检查用户是否存在于表中

php - 适用于 PHP/MySQL 的 App Engine 替代品

database - 无法生成很多独特的字符串

c# - ASP.NET MVC 5 - 从数据库中选择数据的 LINQ 查询