2014-02-08 153 views
-1

我正在努力決定使用哪種數據庫模式。一張大桌子,或許多小(雖然更難以管理)。數據庫模式設計選項

我有10個模板,每個都有自己的文本字段。我正在嘗試將模板的文本存儲在數據庫中,然後在調用網頁時,我將在html模板中顯示正確的文本。因爲這些模板混合在一個可以向後或向前導航的屏幕序列中,所以我需要能夠對它們進行排序,我只能想到添加page_number列。我也想重新排列它們並根據需要使用page_number列刪除它們。

我打算在Web應用程序中完成所有這些工作,而不需要標準的文件夾/網頁結構,如小型CMS系統。

選項1, 我可以創建一個包含許多列的大表,其中很多列都是空的,每行佔一半以上。這不好嗎?

選項2, 我只能使用相關的模板列創建許多表格。 我看到的問題是,當我刪除一行時,重新填充每個表中的列的頭痛,因爲我需要重新排列表示頁碼的列。如果我使用一張大桌子,我會減少哪一個。

我想過將頁碼移動到另一個名爲page_order的表中,但我想不出一種方法來維護其他表之間的有效關係,如果我進行更改。

我還沒有弄清楚在一行被刪除時如何重新排序數據庫中的列。當然這是一個普遍的問題!?

感謝您花時間幫忙!

回答

0

有一個表,每個模板包含一行。它可能看起來像:

id (INT, auto-increment) 
page_order (INT, unique key here, so pages cannot have the same number) 
field1 (STRING, name of the text field) 
value1 (STRING, contents of the text field) 
field2 
value2 

然後你必須決定的最大領域,任何頁面都可以有(N),並不斷添加字段/值列高達N.

這樣做的好處是,你有一個沒有稀疏填充的表格(只要模板具有相同數量的字段,即使這些字段的名稱不同)。

如果您想對其進行改進(對於少量數據可能不需要),您可以將字段更改爲INT ID並將其連接到包含(field_id,field_name)的查找表。

+0

嗨感謝您的反饋,對於實踐我想我會把兩種解決方案都解決掉!這樣我可以獲得經驗,因爲我懷疑數據庫規劃更復雜。我已經開始使用多個表格了,因爲我認爲大多數列對於某個特定的模板來說是空的,而這個模板很少見,但有10列。儘管我仍然無法找到任何空列降低性能或任何其他可忽略的跡象效果如何? – Mangopop