2013-05-06 98 views
0

我需要實現具有以下能力的機構找到有效/無效用戶:策略在一段時間

  • 添加新用戶
  • 刪除用戶
  • 使用戶
  • 禁用用戶

還讓管理員選擇一段時間,然後顯示哪些用戶是:

  • 可在該系統中的該期間
  • 啓用
  • 殘疾人

結果應該是的時間,準確的時間段。

注意:用戶可能已啓用或禁用多次,我需要跟蹤每一次更改。因此,如果用戶在3月1日和4月2日之間被禁用,如果管理員查詢3月1日到4月2日之間的時間段,則不應將結果顯示在結果中,但如果管理員查詢,結果中應包含該結果任何其他時間段。

此外,棘手的部分是包含在管理員查詢期間之前添加,刪除,啓用或禁用的用戶。

我現在還沒有設置任何設置,所以我對任何想法都很滿意。其實我正在考慮一個像log這樣的機制,你可以稍後查詢它,但它應該非常快,因爲我需要在很多地方使用它。

另外我更喜歡在單個MySQL查詢中完成所有操作,但PHP組合/交互也可以。

+1

問題是...? Methinks研究慢慢變化的維度並回來:http://en.wikipedia.org/wiki/Slowly_changing_dimension – 2013-05-06 13:45:28

+0

@Denis感謝您的意見,我現在正在閱讀......:) – Mahdi 2013-05-06 13:48:08

+0

@Denis再次感謝,這真的很有幫助。我仍然沒有實施解決方案,但我明白了。請重新發送您的評論作爲答案,以便我可以選擇它作爲接受的答案。我相信它可以幫助其他人! :) – Mahdi 2013-05-06 20:06:41

回答

1

每評論,看看漸變維度:

http://en.wikipedia.org/wiki/Slowly_changing_dimension

額外的頂部,已實施了幾次自己。就我個人而言,我發現最好有兩組表格,而不是單一表格。主要的一個作爲一個額外的REV(用於REVISION_ID)一個普通表的

想想場:

id, rev, field1, field2 

轉是一個外鍵修改表:

id, rev, field1, field2, start_date, end_date 

如果你曾經使用Postgres來實現它,我建議查看tsrange類型而不是兩個單獨的start_date和end_date類型。

主表與歷史表使「正常」查詢執行更好,更容易索引。

+0

謝謝,知道這件事真的很好。我認爲我只是面臨一個奇特的問題,我最終需要重構我的結構,但是我從中學到了非常好的東西。還要感謝'tsrange',因爲我也在處理地理數據,所以我最終可能會轉向Postgres,因爲它在某些(很多?)情況下似乎比MySQL更好。 :) – Mahdi 2013-05-07 07:42:49

+0

做到這一切。 :-) – 2013-05-07 12:13:44