2010-06-03 44 views
2

我不知道我應該在這裏做什麼...正確的方式來設置MySQL表

我有一個數據庫大約20,000記錄。每個記錄都有大約20列。

我想爲此數據庫添加大約20個附加列,這些列將位於每條記錄的加載不同URL的行上。大多數情況下,這些將是空白的。

什麼是這樣做的 「正確」 的方式:

  1. 添加額外的20列(youtubeurl,facebookurl等) (優點:只有一個URL調用//缺點:讓我的數據庫大得多)

  2. 添加一個包含三列的額外表格 - 我可以額外調用的'ID','URLType','URL'? (優點:保持主表//缺點小得多:需要額外的SQL查詢)

我應該怎麼做?

+0

我知道這是邪惡的,但我想我會試圖在這裏使用一個位掩碼! Muhahahahaha – decompiled 2010-06-03 15:32:01

+0

20000條記錄不是那麼多,所以我建議你只是添加列。數據庫管理系統旨在處理這種類型的事情,這是他們的目的。 – 2010-06-03 15:32:43

+0

我同意'Lex'的範圍..我所看到的主要問題是URL的「類型」從不具體,並且可以隨時更改。缺乏靈活性可能會使[EAV模型](http://en.wikipedia.org/wiki/Entity-attribute-value_model)成爲更好的選擇 – Matt 2010-06-03 15:35:04

回答

4

一切都是平等的,我會選擇(2)。這使您可以保持數據規範化並提供靈活性,以便將來可以添加更多網站。

FWIW,這不需要額外的查詢來選擇數據,因爲你可以加入其他表。但是,當然,這將需要額外的INSERT/UPDATE查詢。

+0

如果使用ORM,甚至更新/插入都非常容易。 – Erik 2010-06-03 15:34:27

+0

當然,我只是想澄清一下,因爲這是OP對此方法的擔憂之一。 – 2010-06-03 15:36:44

+0

非常感謝。 Erik - 什麼是ORM? – jamescridland 2010-06-03 15:42:03

2

選項2幾乎肯定是更好的選擇。它可以讓您在未來添加新的Url類型更容易(只需創建新的URLType,而不必創建新列)。那麼使用這些URL的頁面就不必修改以適應新的URL類型;他們會把它從桌子上拿出來。換句話說,你只需要在一個地方而不是幾個地方進行更改。

如果人們大多​​只有這些網址中的一小部分,那麼將它拆分成一張單獨的表格幾乎肯定是一種可行的方法。

2

您要添加的所有內容都是一個網址。每個URL都與您當前記錄中的一個(或更多)相關。因此,要麼:

對於只有一個record- 網址表url和FK到記錄表的網址

或可涉及到多個record- 網址表url_id和URL鏈接 URLS表record_id和url_id

相關問題