2011-03-09 21 views
2

我正在創建一個包含五個部分的在線應用程序。每個部分都有自己的表格。我們稱之爲SECTION1,SECTION2等部分。將會有一個名爲APPLICATIONS的主表。該表中的第一列將是ApplicationID。我應該使用「RecordID」作爲列名嗎?

超快速服務器上只有幾千條記錄,所以我想把注意力集中在表格和關係的可讀性上,而不是我可以節省多少處理能力,如果我去規範化直到我生病。

下面是我在想我應該命名和構造表格。你能確認這是最可讀的方法嗎?在過去,我有效地做到了這一點。但是,我想看看是否有一些簡單的改進或想法可以整合。在一到十的範圍內,這種表/列命名的方法有多堅實?

APPLICATIONS - TABLE 
ApplicationID - pk 

SECTION1 - TABLE 
RecordID- int - pk 
ApplicationID - fk 
Answer1 - text 
Answer2 - text 

SECTION2 - TABLE 
RecordID- int - pk 
ApplicationID - fk 
Answer1 - text 
Answer2 - text 
+0

正常化不僅僅是關於性能,而是關於可維護性。這種方案(我不能誠實地稱之爲設計)對於維護來說是非常可怕的,因爲每當有人想要改變seciotn中的內容時,您都必須添加列。學習規範化,那麼它似乎不會很難做到。 – HLGEM 2011-03-09 22:31:38

+0

我瞭解正常化。我也瞭解它的優點和缺點。當然,其優點是減少了冗餘和更多的可維護性。但缺點是開發時間可能會延長。我是唯一的編碼員,並且知道項目的參數。問題和迴應在未來十年內不會改變。保證。一旦啓動並運行,代碼將被鎖定。另外,我的優勢是更多的ColdFusion和更少的SQL。這是一個很少有數據的Web應用程序。 – 2011-03-09 23:29:37

+0

@HLGEM,我完全同意你的看法,那可怕的設計太可怕了。但是,它在2001年建立的網站上運行得非常有效。該網站仍在運行,並且已經準確快速地存儲了信息,並且產生了超過2000萬美元的資金。在我開發它的時候,CEO向我保證,問題和答案永遠不會改變。他是對的。 – 2011-03-09 23:34:46

回答

0

我會去與這種結構:

Records - TABLE 
RecordID- int - pk 
SectionID int - fk 
ApplicationID - fk 
Answer1 - text 
Answer2 - text 

Sections - TABLE 
SectionId int - pk 
SectionSequence int 

要複製的結構 - 如果這改變了(說你需要添加一列),您需要申請更改爲幾個表。 DRY也適用於數據庫。

+0

Oded,感謝您對DRY文章的鏈接。這是一個很好的閱讀。 – 2011-03-09 23:18:34

+0

由於我對示例不滿意,因此我將此問題保留爲3個月以上。我已經回顧了問題和答案。我認爲你是最好的示例代碼的最佳解決方案。謝謝你的幫助!!! – 2011-08-01 12:28:20

0

首先,爲什麼要將section1和section2作爲兩個不同的表格?您可以將它們合併到一個表格中,並添加一列sectionIDsectionTitle

然後,您的sectionID將在表格中顯示,您不需要按照您的設計使用列RecordID

這是根據我對你的問題的理解,除非你有任何特定的理由保留第1節和第2節的表格。

編輯 - @Oded的答案結構更好。

+0

每個部分最多有50個問題。我不想有一個250列的表。這就是爲什麼我把它分成邏輯部分。 – 2011-03-09 16:47:32

2

我總是將我的id列命名爲id,表名前綴足以知道我在說的id。

在另一個主題中,您的SECTION表似乎具有完全相同的結構,爲什麼不只使用一個number列的表或類似的東西?

響應意見

SECTION 
id - pk 
ApplicationID - fk 
name 

QUESTION 
id - pk 
text 

SECTION_QUESTION 
id - pk 
SectionID - fk 
QuestionID - fk 

ANSWER 
id - pk 
SectionQuestionID - fk 
text 

這樣,你可以創建你的各種問題,甚至共享部分之間的一些問題。 SECTION_QUESTION關聯表映射問題和部分之間的關​​系。然後,您將答案存儲到與SECTION_QUESTION關聯的ANSWER而不是QUESTION這樣,您可以準確地知道答案是在哪個部分進行的。

我希望我的提議很明確。

+0

每個部分最多有50個問題。我不想有一個250列的表。這就是爲什麼我把它分成邏輯部分。 – 2011-03-09 16:37:09

+0

您應該想想另一種存儲答案的方法,如果您打算在給定部分中爲每個問題添加一列,則這不會在所有情況下都是可擴展的,並且會讓使用者感到痛苦。 – krtek 2011-03-09 16:38:51

+0

Krtek,我試圖想出另一種方式來存儲答案。你有什麼想法如何做到這一點? – 2011-03-09 17:47:35