挑战数据建模问题

时间:2011-05-11 19:28:43

标签: mysql database database-design data-modeling

我有一个存储客户物品的表格。该表需要反映以下活动:

  1. 当客户将项目添加到他/她的队列时。
  2. 当商品被标记为运送给客户时。
  3. 当物品实际发货时。
  4. 当商品被标记为客户退货时。
  5. 为物品创建退货运输标签时。
  6. 从客户收回物品时。
  7. 工作流程如下:

    1. 用户将项目添加到列表中。
    2. 预定事件标记要发货的项目(对应于信息点2)。
    3. 员工创建运输标签,然后将商品标记为已发货(至第3点) ---客户收到物品,顾客很满意。
    4. 客户标记要退货的项目。
    5. 员工为项目创建运输标签。
    6. 物品被拿起并返回。
    7. 客户的帐户应显示以下内容:

      1. 队列中的项目。
      2. 物品已发货。
      3. 标记为退货的商品(如果客户希望将商品保留更长时间,则允许客户取消)。
      4. 在我们最终标记了要装运的商品时,没有价值(在我的方案中)提醒客户。

        我最初想到了继承,但事情已经开始迅速摆脱困境。我不知道我是否应该为每个信息点都有一个子类。此外,有些事情似乎不应该在他们自己的子类中(标记为装运的项目,以及返回,似乎是“介于”类之间)

        我应该使用继承并为每个信息点创建一个类吗?还是我让这复杂化了?

        当前架构

        items
           - id
           - typeid (in queue, shipped, etc....)
           - userid
           - itemid
           - shippedat
           - returnedat
        

        我正在使用mySql,并预计该表会很大!

1 个答案:

答案 0 :(得分:3)

听起来您需要一种很好的方法将项目本身与适用于它们的工作流程分开。一种方法可以如下:

  • 定义项目的表格,最低限度包含useriditemid
  • 定义工作流程状态的表格,最低限度包含idname(例如'处理','已发货')
  • 定义表将项目链接到工作流状态,其中包含项目id的外键和状态id的外键,以及适用于给定项的元数据处于给定状态的项目,例如进入或开始/完成状态,谁处理或检查该状态的项目等等。

现在,您可以通过将一个给定项目连接到其工作流程来找到该数据,而不是在项目表上包含shippeddatereturneddate等特定于州的字段(警告:提前伪代码!) :

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记录,并且工作流程状态是“已发货”。