2013-03-12 82 views
0

我正在使用MySQL/cakePHP構建一個應用程序,它涉及以下要求。mySQL數據爲每個用戶唯一

  • 管理員創建用戶需要完成的步驟。例如是/否類型的問題。管理員創建這些步驟,新用戶應該得到它們。

  • 用戶在登錄時需要完成所有這些步驟。

我的問題是什麼將最好的方式在數據庫中做到這一點(MySQL的)

  • 當用戶註冊它查詢步驟表,併爲每個步驟創建新行該用戶?它通過查看步驟表來創建來自服務器端代碼的行?

  • 創建一個新的臨時表來存儲關係?

我相當圍繞關係設計經歷,但是,最好的方式有點難倒要做到這一點,並在同一時間面向未來的自己。

**Mock Structure** 
Steps 
id 
name 
order 
desc 


**Users** 
id 
username 


**Step_Users** 
step_id 
user_id 
result1 
result2 
result3 

回答

1

基本上你的表很好。以下是一種情況:有人註冊。您從表Steps中採取所有步驟並使用此字段創建表單。用戶填寫表格並提交。然後你將這些答案寫入表。不知何故,你保持信息,用戶已經完成了答案(可能是另一個字段,或者只是檢查step_user表中是否有行)。當然,根據您的確切需求,有不同的方法來處理這個問題。因爲你沒有提到更多的細節,我可以在這裏提到更多的場景,但不知道他們是否會提供幫助。
如果你想確保每個用戶都有每一步的唯一數據,那麼從表step_user你應該在step_id和user_id列上創建一個複合唯一索引,但是當然你也需要代碼來檢查它。

0

這也是我的設計方法。只是,以迎合不同量的步驟(問題)後,也許是步保存爲每個問題的一個記錄,併爲Step_users表做同樣的:

**Step_Users** 
step_id 
user_id 
result 

如果需要的話,你可以一個標誌添加到用戶當用戶完成所有步驟時設置的表格。

0

我想打破它這種方式:

你有,我認爲,在Steps表中的一行在過程中的每一步。對於系統中的每個用戶,您在Users表中有一行。因此,Step_Users表中的行數應爲(Steps中的行)*(Users中的行)。

我建議將一個布爾值放入Users表中即steps_finished。這樣,您只需從用戶表中拉出,他們是否已被標記爲已完成即可知道。此外,對這些步驟的未來更改不會影響用戶,除非您想要。在一個帳戶steps_finished =假或用戶日誌:

  1. 用戶註冊了一個新的帳戶:

    註冊或登錄時按照此步驟。

  2. 如果steps_finished = true,則忽略此休息。如果是假,繼續。
  3. 系統並在第3步一select * from Step_Users where user_id=X order by step_id
  4. 系統做了select * from Steps order by id
  5. 計數通過行和當你發現在步驟3中的行,是不是在步驟行比較他們在步驟2中的行2,給他們那一步。 (如果您通過從第3步,沒有整個表獲得在步驟2中從行失蹤,然後去設置steps_finished =真)

NEXT PAGE的提交

  1. 一旦他們給出的結果這一步,select * from Step_Users where user_id=X and step_id=Y
  2. 如果結果回來爲0行返回,那麼你知道他們以前沒有提交這一步。 'insert into Step_Users(step_id,user_id,result1,result2,result3)values(X,Y,'response1','response2','response3')
  3. 再次執行上述步驟3-5。

有很多原因可以檢查表中的行,但最大的原因是用戶可能會停止在中間的步驟,並且您需要一種方法來跳回到它們的位置開始。

相關問題