我有一个存储客户物品的表格。该表需要反映以下活动:
工作流程如下:
客户的帐户应显示以下内容:
在我们最终标记了要装运的商品时,没有价值(在我的方案中)提醒客户。
我最初想到了继承,但事情已经开始迅速摆脱困境。我不知道我是否应该为每个信息点都有一个子类。此外,有些事情似乎不应该在他们自己的子类中(标记为装运的项目,以及返回,似乎是“介于”类之间)
我应该使用继承并为每个信息点创建一个类吗?还是我让这复杂化了?
当前架构
items
- id
- typeid (in queue, shipped, etc....)
- userid
- itemid
- shippedat
- returnedat
我正在使用mySql,并预计该表会很大!
答案 0 :(得分:3)
听起来您需要一种很好的方法将项目本身与适用于它们的工作流程分开。一种方法可以如下:
userid
和itemid
id
和name
(例如'处理','已发货')id
的外键和状态id
的外键,以及适用于给定项的元数据处于给定状态的项目,例如进入或开始/完成状态,谁处理或检查该状态的项目等等。现在,您可以通过将一个给定项目连接到其工作流程来找到该数据,而不是在项目表上包含shippeddate
和returneddate
等特定于州的字段(警告:提前伪代码!) :
SELECT item.id, item.userid, item_workflow.completed_date AS returned_date
FROM item
JOIN item_workflow
JOIN workflow
WHERE workflow.state = 'Returned'
通过将项目连接到其工作流程并过滤特定状态,您可以找到处于或未处于给定状态的项目,并计算每个州的项目。所以要从你的问题中找到一个例子:
没有价值(在我的场景中) 在项目有时提醒客户 已标记为我们的运输。
在此架构中,您搜索给定用户的给定项目,并查看该项目是否存在item_workflow记录,并且工作流程状态是“已发货”。