2011-05-27 18 views
1

我有3個數據庫表,我需要正常化它們。像這樣的表之間的關聯:SQL表協會

表: 1.問題 2.答案 3.評論

  • (問題可以包含很多的答案和許多評論)
  • (答案都可以包含許多評論)

我知道我可以在一個表格中使用問題和答案,然後我解決了這個問題,但是我想以這種方式使用它,那麼什麼是最好的方法來將'comments'與'問題'和'答案'?

我試着把問題ID和答案ID放到評論表中,每行只使用其中一個,對嗎?這樣我可以在PHP腳本中使用它們,但我不知道是否有另一種更好的方法,因爲我問了。

謝謝。

+0

值得看看它是如何做它http://data.stackexchange.com/stackoverflow/query/new – 2011-05-27 04:37:00

+0

@ConradFrix這是一個很好的貢獻 – Al3bed 2011-05-27 04:48:10

回答

3

我想將它們設置爲如下:

Posts (both Questions and Answers would be types of "Posts"): 
Post_ID 
[Fields Common to Posts, e.g. "Post_Content", "Poster_ID", "Post_TimeStamp" etc.] 

Questions: 
Question_ID 
Post_ID 
[Question-specific fields, e.g. "Question_Title"] 

Answers: 
Answer_ID 
Post_ID 
[Answer-specific fields] 

Comments: 
Comment_ID 
Post_ID 
[Comment fields] 

有一個單獨的帖子表的主要思想是一定要規範你的數據庫,並允許有邏輯結構徵求意見指向兩者。就像APC評論的那樣,它也爲您開發將來開發您的網站/數據庫提供了一個很好的設置(當您可能需要其他類型的可評論「帖子」時。

儘管下面列出的枚舉方法可行,但它不是很好數據庫設計。一般情況下,我只會用枚舉,當你代表項目的真實世界的名單建議..不適合舉辦數據庫結構。

+0

+1 - 規範的解決方案。該解決方案具有明顯的優勢,即在需要時添加新類型的帖子是相對容易的。我同意在這個具體例子中不太可能,但如果我們討論的是人而不是POSTS,那麼優點就會更清晰。 – APC 2011-05-27 04:25:28

+0

有很好的答案..不是我在批評你的答案。只是對具有Question_ID以及Post_ID之類的問題表的理由感到好奇嗎?您認爲對於帖子和針對具體問題常見的是什麼?謝謝! – abhilash 2011-05-27 04:30:48

+0

更新了帖子,並附有說明以及示例字段 – babonk 2011-05-27 04:35:42

0

使用額外的type字段中comments表持有"question""answer"對於多態關聯。查詢然後包括該字段:

SELECT * FROM `comments` WHERE `type` = 'question' AND `foreign_key` = 42 
+0

我們無法針對兩個表定義外鍵約束,因此可能無法強制執行該列中的值。 (假設我們使用InnoDB作爲我們的引擎,否則這一點是沒有意義的)。 – APC 2011-05-27 04:35:34

+0

我已經需要保存ID,所以我將無法添加新列。想像這裏在stackoverflow,我想他們使用它像@babonk說的。 – Al3bed 2011-05-27 04:36:04