我正在为mysql 5.5中的一个应用程序设计一个数据库,该应用程序在用户表和业务表之间具有多到多的关系,如下所示:
user
----
user_id (PK)
handle
email
password
password_salt
created_at
updated_at
business
--------
business_id (PK)
business_name
website
created_at
updated_at
updated_by
为该表定义了以下桥接表
user_business_relationship
--------------------------
user_id (FK) (PF)
business_id (FK) (PF)
但是,在用户与业务相关联并将关系记录在user_business_relationship表中之前,业务需要得到批准。
因此,我定义了以下审批人表
(option 1)
--------
user_business_relationship_approver
-----------------------------------
user_id (FK) (PF)
business_id (FK) (PF)
approver_id (FK) (PF)
status |requested|approved|rejected|
updated_at
我的问题如下:
我知道,当我扩展我的数据库设计时,我将遇到其他类型的情况,在这些情况下,我需要使用需要另一个表的相同的审批工作流,例如:
user_promotions_relationship_approver
-------------------------------------
and so on
因此,您建议我为每种关系类型定义单独的审批人表,还是只为任何需要批准的关系类型定义一个泛型审批人表比较好?
(option 2)
----------
relationship_approver
---------------------
requestor_id |user_id| (PK) (PF)
request_id |business_id|promotion_id|etc| (PK) (PF)
approver_id (PF) (PF)
request_type
status
updated_at
updated_by
我也将感谢关于我目前的设计的任何其他反馈意见。谢谢
发布于 2015-08-26 08:25:54
如果您有多个审批者,并且需要它们与多个事务相关联,则使用的方法是好的。
由于您关注可伸缩性,我将使用选项1和2的组合。
换句话说,我会采用这种方法:
user_business_relationship_approver
user_id (FK) (PF)
business_id (FK) (PF)
approver_id (FK) (PF)
status |requested|approved|rejected|
updated_at
但也加入了这个领域
request_type
事实上,拥有一个控制表来管理类型可能是个好主意(在这些情况下,这是我个人的选择)。
所以你会有一张这样的桌子:
request_type
type_id (PK)
type_name
然后type_id
也会以FK
的身份在user_business_relationship_approver
上生活
这样,如果您有一个新的请求类型,您可以简单地将它添加到request_type
表中,它将成为为另一个表选择的一个选项。
发布于 2015-08-26 08:16:24
我只需在主关系表中定义一个属性状态字段:
user_business_relationship
user_id (FK) (PF)
business_id (FK) (PF)
status |requested|approved|rejected|
如果这样做,则不需要任何额外的表来处理审批。您还可以添加可能需要的更多字段,以标识请求者、审批者、请求日期、批准日期等。
https://stackoverflow.com/questions/32231651
复制