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

时间:2015-06-23 18:35:30

标签: mysql database laravel database-design relational-database

如果我无法在标题中准确描述问题,请道歉。我的方案如下。

我的网站是一个连接供应商和买家的平台。供应商列出他们可用的商品/服务,买家可以从他们那里购买商品/服务。

新买家(用户)注册很简单,因为他们的信息存储在users表(users, user_profile, user_history等)中,并与唯一的user_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来处理所有事情?

感谢。

2 个答案:

答案 0 :(得分:0)

取决于。

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

即。有一个单独的表叫做#34; flags&#34; &#34; flagmappings&#34;

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

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

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

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

答案 1 :(得分:0)

如果我是你,我会坚持使用用户表来表示所有内容(只要您没有大量特定于供应商的字段)。它只是让事情更清洁。然后,您可能在users表中有一个'is_vendor'字段。

或者,如果您想要更复杂,您可以使用以下内容实现角色:

users Table
id
firstname
etc...

groups Table
id
title
etc.

user_groups Table
user_id
group_id

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