2011-11-22 57 views
4

這種處理過期的免費賬戶是有點哲理,然而,這裏的情況和相關的問題。 假設您銷售溢價賬戶並同時提供有時限的免費賬戶。 用戶註冊並使用他們的電子郵件地址登錄。創建一個免費帳戶不需要交出任何過分敏感的數據(只是電子郵件)。 免費用戶有X天的時間來評估您的服務,然後升級到高級帳戶或看到他們的免費帳戶到期。如何在SaaS環境

的問題是:如何最好地處理這個「過期」數據庫明智?

,你可以:

1)在你的世界「用戶」表中的賬戶將其標記爲期滿

  • PRO:用戶名/郵件始終是唯一的,沒有人可以與 重新註冊相同的電子郵件
  • CON:一個不能用相同的電子郵件(也許 他希望能夠做到這一點的一個新特性後,他感興趣的是 添加)重新註冊
  • PRO:人總分類帳科目是在一個地方,統計 檢索更容易處理
  • CON:用戶表只能隨着時間的推移

2)刪除帳戶,可能將它移動到user_history或expired_user表中獲取更大的

  • PRO:您的用戶表更小,只包含來自「活」用戶的數據
  • CON:過期帳戶的用戶名/電子郵件是可重複使用的(您的日誌很可能會混亂,並且您必須始終記錄除用戶名以外的用戶ID,因爲那樣會不是唯一的了)
  • PRO:過期帳戶的用戶名/電子郵件是可以重複使用的是想給審判之後添加了新功能,可以這樣做的另一個運行,而無需被迫選擇其他電子郵件地址(過期的用戶)
  • CON:用戶統計信息收集變得更加複雜

有沒有人遇到同樣的問題?

回答

3

我建議拆分模式分爲兩個:

TABLE: users 
user_id (PK) 
email_address 
password_hash 
.... 

TABLE: user_status 
user_status_id (PK) 
user_id (FK) 
status_date 
status_value 

給定帳戶的當前狀態是一個與最新的狀態日期。 當用戶註冊一個「免費」帳戶時,您會將一條記錄插入到狀態值爲「new_free_status」的user_status中;當帳戶到期時,您將插入狀態值爲「free_account_expired」的記錄。您使用狀態來檢查用戶是否可以登錄;如果您希望允許用戶在免費帳戶上次過期後至少一個月內註冊,請檢查用戶狀態記錄以查看帳戶何時關閉。

當然,您可以創建另一個名爲「status」的查找表,並將其與「account_type」表結合在一起 - 這樣,您的數據就會變得更加自我描述。

這種設計的關鍵在於,您希望將用戶配置文件與當前狀態分開,並隨時跟蹤該狀態。這樣您就可以回答諸如「有多少人在試用後註冊付費帳戶」,「註冊免費帳戶到人員升級之間需要多長時間?」,「有多少用戶再次回來試用? 「等等。

3

有一個用戶表太大不應該是一個問題 - 存儲便宜,如果它索引的話,你會被罰款。我目前正在推出一個類似的應用程序,我們只是將所有帳戶保留在用戶表中。如果用戶讓他們的試用時間超過一個月左右,我們只是讓他們再次註冊,如果他們想要檢查新功能,我們只是重新激活他們的帳戶。

這一戰略的工作,當然很好,因爲應用程序的類型。你通常會每天使用它;你永遠不會使用我們的應用程序幾個小時,然後再扔掉。這就是爲什麼它對我們有意義,但例如,Adobe用Photoshop來做這件事是沒有意義的。

我說的話未必適用於您的情況,但我(我只能假設其他開發人員)認爲這是一個不好的做法,使用多個表的數據切成類別。使用一個列和一個WHERE子句來做到這一點,這是他們的目的。