2014-09-24 19 views
1

tl; dr:需要在第二個表中存儲一個表的ID數組,但我能找到的都是凌亂的解決方案。替代在SQL數據庫中存儲ID列表

我有一個測驗系統我設計(基於上面的答案this問題)以下數據庫表:

Quizzes 
    -quiz_name TEXT PRIMARY KEY NOT NULL 

Questions 
    -id INTEGER PRIMARY KEY AUTOINCREMENT 
    -quiz_name TEXT REFERENCES Quizzes(quiz_name) 
    -prompt TEXT NOT NULL 
    -difficulty TEXT NOT NULL 

Answers 
    -id INTEGER PRIMARY KEY AUTOINCREMENT 
    -quiz_name TEXT REFERENCES Quizzes(quiz_name) 
    -prompt TEXT NOT NULL 
    -value INTEGER NOT NULL 

Quiz_Results 
    -id INTEGER PRIMARY KEY AUTOINCREMENT 
    -quiz_name TEXT REFERENCES Quizzes(quiz_name) 
    -num_correct INTEGER NOT NULL 
    -time TEXT NOT NULL 

我想有一個表Question_Order看起來像這樣:

Question_Order 
    -quiz_name TEXT REFERENCES Quizzes(quiz_name) 
    -???some way of storing the IDs of all questions for this quiz 

我的第一個直覺就是將ID轉換成一個以逗號分隔的字符串,並將其放入Question_Order中,但這似乎是一個破解良好RDBMS實踐的破解解決方案。 This問題和this詢問有關存儲ID列表。但是將問題放在單獨的表格中(而不是將其全部放在測驗表中)是因爲它們可以重複使用,所以我無法在問題中添加「訂單」列。我也可以爲每個測驗創建一個新表(例如「First_Quiz_Order」),但這也很麻煩。 如果它很重要,我正在使用SQLite。

回答

2

如果您希望在不同測驗中重複使用問題,則questions表中不應包含quiz_name字段。

您可以通過從questions下降quiz_name和創建表的quiz_question代替question_order解決這個問題以及排序問題:

- quiz_name REFERENCES quizzes 
- question_id REFERENCES questions 
- question_order INT 

這可讓您測驗之間共享的問題,並建立一個(唯一每次測驗)爲了解決問題。

+0

德哦 - 我絕對應該在問題的事情上抓住了quiz_name ... – Prime 2014-09-24 00:47:43

+0

肯定讚賞和避免逗號分隔字符串陷阱。 – 2014-09-24 01:01:47