2015-09-24 42 views
0

我只是在將我的網站上的博客帖子表放在一起。在SQL中存儲標籤,類別和int []的最佳方式

我知道如何使用SQL,並且我知道一些關於不同類型和長度的信息,但是我對錶格的最佳長度和類型感到茫然。

我現在有事情是這樣的設置是:

  • ID - BIGINT(20)
  • AUTHOR_ID - BIGINT(20)
  • 標題 - 文本
  • 標籤 - VARCHAR(50)
  • 個類別 - VARCHAR(50)
  • 項目 - VARCHAR(50)

標籤是標籤的字符串數組爲後,使用類別相同。項目將是一系列整數,即與帖子關聯的「項目」的ID。 (每個項目都有自己的頁面,當你進入頁面時,你可以得到關於它的所有文章的列表)。

我的問題是,我可以設置這張表的最優化方式是什麼?

UPDATE:

目前我在存儲這個和優化磁盤使用情況的最佳途徑有趣。現在我有一個免費的x10hosting服務器,我將要使用的服務器有512MB的限制。如果有必要,我可以在稍後支付更大的服務器,但是我想堅持使用免費的服務器,直到我超出我的極限。

+1

有「最優化」,並有適當的。正確的方法不是試圖將所有東西塞進一張表中。谷歌的「多對多關係」,這是關係數據庫的絕對基礎。 – lafor

+1

標籤和分類應該有自己的表格,然後將表格連接到每個 –

+1

爲什麼不標準化標籤和項目?以數組的形式顯示它們是UI問題,而不是數據問題。通過作爲一個固定的數組存儲在一個領域,它使修改和搜索變得更加困難。 –

回答

0

對於嚴重的節省空間的要求:

  • 壓縮在客戶端和存儲標題的BLOB。
  • 將標籤(等)放入逗號分隔符中,並使用FIND_IN_SET()來檢查tags是否包含特定的tag。這會很慢,並且不能使用任何索引。
  • 使用MyISAM(2x-3x較小的磁盤佔用空間)。
  • 最小化索引。
  • 使用TINYINT/SMALLINT/MEDIUMINT代替INT或BIGINT。
  • 使用unsigned
  • 使用LATIN1如果你不需要UTF8;對任何不需要utf8的東西(例如郵編)使用latin1。
  • 0.5GB微不足道;檢查其他服務。
+0

我應該強調,我建議的大部分是_bad practice_。我只是提出它,因爲「空間保守」似乎是最重要的。 –

0

在PHP中,您可以使用一個名爲「serialize」的函數,我一直在SQL存儲中使用它。

$foo = serialize($bar); 

現在只需存儲$ foo。 $ bar甚至可以是完整的對象。事實後,你可以只抓住價值和

$bar = unserialize($foo); 

$ bar現在包含任何你想要的。數組,對象等。這使得你的sql表格的佈局很懶,但是由於開始和結束結果只是php腳本中的變量,所以表格並不重要。只是使字段文本(不是varchar(最大)),你是肉汁!

php serialize function

+0

我寧願將它與數據庫中的查詢整齊地存儲起來。儘管這樣做很酷的方式,我可能會在某些時候使用它:) –