2015-06-24 30 views
1

我目前正在構建一個像這樣的桌面應用程序:用戶創建一個項目,並添加問題/答案(每個問題只有一個非空答案)。每個項目可以有無限量的問題/答案,並且每個問題/答案可以鏈接到無限量的項目。我應該如何設計我的SQL表?

我創建了兩個項目和問題的表格,但我不知道如何連接兩個。我會想到爲每個問題添加項目ID,但這些問題只能與一個項目相關聯。

enter image description here

例子:

Project name: Geography 
Project name: History 

Question: When did the WW1 end? 
Answer: 1918 
Linked to: Geography, History, ... 

的問題都可以納入這兩個項目,並且兩個項目可以有更多的問題。

謝謝。

回答

3

你應該創建一個錶鏈接項目和質量檢查:

Create table Projects_QAs(ProjectID int not null,QuestionID int not null, 
primary key(ProjectID,QuestionID) 
) 

您還可以創建foreign keys鏈接QuestionIDProjectIDID S中的相關表格。

此外,你可以在(QuestionIDProjectID)更快的查詢,添加Index

0

這是一個很普遍的問題,所以我有一個非常普遍的答案。

有3種類型的數據庫關係: -One到一個 -One一對多 -many一對多

目前只考慮一個一比一的關係,其中項目中的唯一標識鏈接到問題中的一個特定唯一標識

您應該考慮採用一對多或多對多模式。

編輯:就像Ormoz說的那樣,第三個表格可以用來實現這個多對多模型,其中新表格的每個條目代表一個問題/項目組合,以此作爲項目和問題之間的鏈接恩。如果我們的general_question(question_id = 1)適合項目project_1(project_id = 1)和project_2(project_id = 2),那麼我們希望在新表p1_q1中有2個記錄(project_id = 1,question_id = 1)和p2_q1(project_id = 2和question_id = 1)作爲將兩個項目鏈接到相同問題的一種方式。

+0

我不知道多對多的概念。通過快速研究,我發現它意味着什麼,它完成了Ormoz給出的答案。謝謝! – Synor

+0

很高興我能幫忙;數據庫關係在您學習時可能會有點棘手,但一旦您開始實施它們,它們就會變得更加清晰。 – Nickknack