2014-09-27 102 views
4

我正在構建一個iOS應用程序進行測試,我想在繼續之前確定我的模型。核心數據模型測試採取iOS應用程序

我發現這個職位非常有幫助:

What mysql database tables and relationships would support a Q&A survey with conditional questions?

我只是想關於執行核心數據的簡化版本一些建議。

下面是我的一些假設:

  • 每個用戶都可以採取一個測試
  • 每個用戶都有一組採取
  • 每個測試每個測試的答案有一個用戶
  • 每個問題都有很多答案

這是我的核心數據模型:

enter image description here

問題:

  • 這是否反映了模型我的假設正確?
  • 是否需要Test_QuestionsUser_Answers
    • 我理論上可以在TestQuestion之間直接有關係嗎? Test -->> Question
  • 有關改進的任何意見將不勝感激。

回答

2

您應該能夠刪除TEST_QUESTIONS和USER_ANSWERS表。目前TEST_QUESTIONS和TEST與USER_ANSWERS和USER之間存在一對一的映射關係,這些映射確實沒有任何用處。

從理論上講,你也可以將TEST和USER結合起來,因爲它們也是一對一的,但有人可能會認爲它們是單獨的問題,應該每個都有一個表。

另外,雖然設計確實符合您對具有單個用戶的測試的假設,但您確定這是您想要的嗎?這意味着測試只能與單個用戶相關聯。

如果是這樣,您可以進行另一種簡化。您可以在ANSWER表中添加一個字段,例如「wasSelectedByUser」,並刪除USER和ANSWERS之間的關係,因爲您可以從USER導航到TEST到QUESTION到ANSWER並確定用戶選擇的內容。

Possible simplification

0

您可以使用您定義的模型,但是當它涉及到驗證階段,要知道如果用戶已通過測試它可能是一個有點棘手,所以我建議你做如下簡化(我沒有考慮到領域,但只有實體很快使它):

Another model

在這種模式下,當用戶確認他的測試,你可以去像這樣的迭代:

for(Answer* a in answers) 
{ 
    Question *q = a.question; 

    if(a.isCorrect) 
    { 
     // ... increment counter by questions .. 
     // ... check with corresponding question by using variable 'q' 
    } 
} 

我建議你添加一個新的實體Category,它可能有助於在用戶界面中向用戶顯示錶單(例如使用UITableView)。有了這個你的表的數據源將類別的列表,你的部分的標題將是你的類別的名稱,你的單元格將成爲問題。

0

你提出不反映你的假設,但正如其他人所指出的模式,Test_questions和User_Answers是不必要的,因爲它們映射一個一個分別測試和用戶。

但(再次,正如其他人說的),我會重新考慮是否要每個用戶只有一個試驗,每個測試只有一個用戶。事實上,你的假設包括「每個用戶在每次測試中都有一組答案」,這意味着可能會有多個測試。爲了適應這種情況,我會添加一箇中間實體Attempt,它將記錄用戶的詳細信息,測試,日期等。通過從用戶到嘗試以及從測試到嘗試的一對多關係,您可以同時允許a)幾個用戶進行相同的測試,以及b)任何用戶進行多次嘗試,嘗試不同的測試或多次嘗試相同的測試。我還會添加一個testName屬性到Test,併爲Question提供questionTitle屬性,用於tableViewCells等。

儘管不是在您的假設中,您的模型當前要求任何一個問題只能出現在一個測試上。我建議改變這個:你可以通過從一組問題中隨機選擇產生不同的測試。但是這確實需要另一個實體「TestQuestionDetails」,它具有Test和Question之間的一對多關係,可以記錄諸如問題編號之類的詳細信息。同樣,正如其他人所建議的那樣,我會將您的問題類別屬性轉換爲單獨的實體。這將允許您添加一個屬性,如「sortIndex」,以便您可以根據需要對類別進行排序(您可能不希望按字母順序排列)。

最終的結果看起來是這樣的:

DataModel

相關問題