2011-05-11 43 views
1

我有一張存儲客戶項目的表。該表需要反映以下活動:具有挑戰性的數據建模問題

  1. 當客戶將項目添加到他/她的隊列中時。
  2. 當物品被標記爲向客戶發貨時。
  3. 物品實際發貨時。
  4. 當物品被標記爲由顧客退貨時。
  5. 當爲物品創建退貨標籤時。
  6. 當客戶收到物品時。

工作流程將作如下安排:

  1. 用戶(S)添加項目(S)上市。
  2. 計劃的事件標記運輸項目(對應於信息點2)。
  3. 員工創建貨運標籤,然後將貨物標記爲已發貨(至信息點3) ---客戶收到物品,客戶很滿意。
  4. 客戶標記退貨。
  5. 員工爲物料創建運輸標籤。
  6. 物品被拿起並返回。

客戶的帳戶應顯示如下內容:在隊列

  1. 項目。
  2. 已發貨物品。
  3. 標記爲退貨的物品(如果客戶想要保留物品的時間更長,則允許客戶取消)。

沒有任何價值(在我的方案中)用於在物品已標記爲在我們的末端裝運時提醒客戶。

我最初想到了繼承,但事情已經開始迅速失控。我不知道我是否應該爲每個信息點創建一個子類。此外,有些東西看起來應該不在他們自己的子類中(物品標記爲裝運,並且爲了返回,似乎是在「之間」類)

我應該使用繼承併爲每個信息創建一個類點?還是我過分複雜呢?

電流模式

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

我使用MySQL,並預測該表是大!

+0

對不起,你的問題是? – Konerak 2011-05-11 19:33:47

+0

@Konerak,我想我想知道我是否以正確的方式接近解決方案,或者如果我是複雜的事情。我是否應該爲每件需要追蹤的部分創建一個子類,或者可以將這些子類集中在一起? – Mohamad 2011-05-11 19:40:05

回答

3

聽起來好像您需要一種很好的方法來將項目本身從適用於它們的工作流程中分離出來。一種方法可以是如下:

  • 定義的一個表,最低限度地包含useriditemid
  • 定義的工作流狀態一個表,微創含有idname(例如「處理','出貨')
  • 定義表格將項目鏈接到工作流程狀態,包含該項目的外鍵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記錄。

+0

有趣的方法...但它似乎增加了另一層複雜性...我沒有提到的另一個考慮是,此表將用於評估一個成員是否有資格裝運(基於他在一個月內有多少人,他每月允許多少人,以及他目前在家中有多少物品)。我不確定它是如何使用附加表格將第二張紙幣的 – Mohamad 2011-05-11 20:10:23

+0

計算出來的,我想你只是澄清了一下對我來說,我的原始問題應該是......在沒有外部視圖的推動下,很難清楚地理解頭腦! – Mohamad 2011-05-11 20:15:24

+0

@djacabson。我會接受這個答案,因爲它在這方面起作用,儘管我轉發了這個問題。這是爲了清除這個對我來說。 – Mohamad 2011-05-11 20:39:04