2009-11-11 34 views
2

我想創建包含動態數據的表,它可以在一個日期,布爾或例如文本文章對元數據的Mysql字段大小

形式:

meta_key =「 isActive」 meta_valu = 「1」

meta_key = 「theDate」 meta_value = 「星期六年07月23 2時16分57秒2005」

meta_key =「說明」 meta_value =「這是一個描述,這個文本可以繼續下去,所以我需要一個很長田」

的問題是meta_value應該是爲了什麼類型的字段不膨脹DB太多插入每一個「1」,哪些字段是動態的,只會消耗自己的長度

希望我是清楚的空間...

回答

0

你可能想的VARCHAR field type

與CHAR相反,VARCHAR值存儲爲單字節或雙字節長度前綴加數據。

+0

所以生病只是定義meta_value作爲一個巨大的varchar,而只是確保用戶輸入不超過該字段的最大高? – tridat 2009-11-11 09:36:56

+0

這會工作,是的,除非你想在那裏超過65535字節。如果你這樣做,那麼@Treby建議的TEXT(最多4GB)會起作用(但可能會導致問題,請參閱http://dev.mysql.com/doc/refman/5.0/en/blob.html) – rjp 2009-11-11 10:11:34

+0

我認爲VARCHAR實際上使用更多的空間(一個或兩個字節的前綴)。它的內容仍然嵌入在行數據中(與行中包含引用的TEXT類型字段相對),因此將使用最大存儲空間長度。 – 2009-11-11 14:30:31

0

希望這有助於:

datatype=Text 
1

我只會用非結構化的數據模型,怎麼樣,你建議,如果你存儲非結構化數據或文件(例如FriendFeed的)。

替代存儲的想法

有比SQL服務器的非結構化數據有更多合適的數據存儲系統。我建議將其中的一個與現有的結構化數據庫結合使用。

SQL選項

如果你不能做到這一點,必須保存在你的SQL數據庫的非結構化數據,你有幾個選項,數據類型是不是真的是唯一的關注,您的數據是如何存儲的是。

  • 某些結構允許讀取數據的應用程序能夠輕鬆地解析數據而無需複雜的字符串操作函數。

  • 能夠爲您的應用程序中的數據定義模型,因此當您讀取數據時,您知道自己擁有了什麼。

以下2個選項提供瞭解決這兩個難題......

XML - XML數據類型

你需要海外商品會有你存儲的數據。如果您需要返回並對內容執行復雜的搜索,那麼XML是您最好的選擇。它還允許您驗證存儲的數據是否與定義的結構匹配(使用dtd)。看到這篇文章。

http://msdn.microsoft.com/en-us/library/ms189887.aspx

或JSON - 爲nvarchar(最大)數據類型

如果您需要爲顯示屏返回網頁上的這些數據,或者使用在JavaScript,然後保存爲JSON將是最簡單的工作用。您可以輕鬆將其加載到可直接操作並可操作的對象模型中。缺點是與XPATH相比,對數據的複雜搜索將非常緩慢(遍歷所有對象,找到匹配的對象)。

如果您要存儲來自其他語言或奇怪字符的數據,請使用nvarchar(unicode版本)。否則,varchar將是最有效的。

+0

我知道,我不確定「做一個完全不同的方式」是否有幫助。「無模式」表格是存儲靈活數據的一種相當常見的方式,並且可以很好地工作(請參閱FriendFeed,例如:http://bret.appspot.com/entry/how-friendfeed-uses-mysql) – rjp 2009-11-11 14:54:59

+1

完全取決於你的情況,friendfeed是一個非常具體的應用程序,他們以這種方式使用它,因爲它們的數據是非結構化的。如果您要存儲非結構化數據,請查看CouchDB(文檔存儲),BigTable(只是一個大表!)或Lucine以及文件系統。我想說一個關係數據庫並不是你爲此所需要的。 – badbod99 2009-11-11 17:09:26

+0

+1我特別喜歡使用Lucene來爲一組平面文件建立索引的想法,它是一種非常好的解決方案,可以很容易地將「無模式」數據納入關係範式。 – 2009-11-11 20:45:16

0

這些被用作臨時表或實時表嗎?

這裏有一個想法我還沒有看到,但可以爲你工作,如果你主要擔心尺寸爆炸,但不關心讓程序做一些額外的工作。不過,我相信最好的做法是在自己的表中創建這些帶有字段的元鍵(例如,OrderDate),然後就可以得到描述,日期等。一個查詢表數據庫表可能會讓人頭痛不已。

創建的元表,用這樣的觀念:

MetaID MetaKey MetaVarchar(255) MetaText 沿革資料

VARCHAR,文本和日期可以爲空。

讓插入程序決定放入什麼單元格,數據庫調用將顯示任何不爲空的字段。短項目將使用varchar,長文本項目以及可以使用的日期,以便您可以更改顯示日期的方式。

0

在MySQL中,我通常使用blob數據類型,它存儲了我用於網站的動態類的序列化版本。

blob基本上是二進制數據,所以一旦你弄清楚如何序列化和反序列化數據,你應該在大多數情況下都是黃金的。

請注意,對於大量數據來說,效率會降低很多,但它不會要求您更改整個結構。

這裏是塊數據類型的一個更好的解釋: http://dev.mysql.com/doc/refman/5.0/en/blob.html