【问题标题】:Challenging data modeling problem具有挑战性的数据建模问题
【发布时间】:2011-05-12 03:45:58
【问题描述】:

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

  1. 当客户将商品添加到他/她的队列时。
  2. 当商品被标记为运送给客户时。
  3. 商品实际发货的时间。
  4. 当商品被客户标记为退货时。
  5. 为商品创建退货运输标签时。
  6. 收到客户退回的商品时。

工作流程如下:

  1. 用户将项目添加到列表中。
  2. 已安排的活动标记要发货的物品(对应于信息点 2)。
  3. 员工创建发货标签,然后将物品标记为已发货(至信息点 3) --- 客户收到货,客户很高兴。
  4. 客户将商品标记为退货。
  5. 员工为物品创建运输标签。
  6. 物品被取走并退回。

客户的帐户应显示以下内容:

  1. 队列中的项目。
  2. 已发货。
  3. 标记为退货的商品(如果客户想要保留该商品更长时间,则允许客户取消)。

当一件商品被标记为在我们这边发货时提醒客户没有任何价值(在我的场景中)。

我最初想到了继承,但事情很快就开始失控了。我不知道我是否应该为每个信息点设置一个子类。此外,有些东西似乎不应该属于它们自己的子类(标记为发货和退货的物品似乎在“介于”类之间)

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

当前架构

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

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

【问题讨论】:

  • 抱歉,您有什么问题?
  • @Konerak,我想我想知道我是否以正确的方式接近解决方案,或者我是否使事情复杂化。我应该为我需要跟踪的每一部分创建一个子类,还是可以将一些东西混为一谈?

标签: mysql database database-design data-modeling


【解决方案1】:

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

  • 定义一个items表,最少包含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 记录以及工作流状态“已发货”。

【讨论】:

  • 有趣的方法...但它似乎增加了另一层复杂性...我没有提到的另一个考虑因素是该表将用于评估成员是否有资格发货(基于他一个月有多少,每个月允许他多少,以及他目前在家中有多少物品)..我不确定如何使用额外的表格来进行这些计算
  • 在第二个说明中,我想你只是为我澄清了我最初的问题应该是什么......如果没有外部观点的推动,有时很难让头脑清醒!
  • @djacabson。我会接受这个答案,因为它在这种情况下有效,尽管我重新发布了这个问题。那是为我解决这个问题。
猜你喜欢
  • 2011-05-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多