2012-01-08 46 views
2

假設我有一個擁有博客的表。 的模式是這樣的:數據庫字段中的XMLSerialized對象。這是好的設計嗎?

ID (int)| Title (varchar 50) | Value (longtext) | Images (longtext)| .... 

在現場圖片我存儲與博客相關的圖像的XML序列名單。

我應該爲此目的使用另一張桌子嗎?

+1

圖像列表與實際圖像或圖像的URL一致嗎? – 2012-01-08 19:39:42

+1

網址和每張圖片的目錄。 – Sanosay 2012-01-08 19:51:12

回答

2

是的,你應該把圖像放在另一張桌子上。在同一字段中有多個值表示非規格化的數據,並且很難與數據庫一起使用。

與所有規則一樣,在數據庫的一個字段中將具有多個值的XML放入其中也是有意義的。第一條規則是:

數據應該是總是一起讀/寫。無需僅讀取或更新其中一個值。

如果滿了,可以有多種原因把數據集中在一個領域:

  • 存儲效率,如果空間已被證明是一個問題。
  • 檢索效率,如果性能已被證明是一個問題。
  • 模式可變性;一個XML字段可以消除數十或數百個不同的表。
1

這取決於您是否需要查詢實際圖像數據本身。如果您發現可能需要查詢某些圖像或具有某些屬性的圖像,則最好以不同的方式存儲該圖像數據。

否則,保持它的方式。

但請記住,只有在您需要時纔在SELECT中包含字段。

2

我肯定會使用另一個表。如果您使用XML,當您需要瀏覽並更新所有圖像的引用時會發生什麼? (你只是寧願做一個Update blog_images Set ...,或通過XML的每一行解析,進行更新,然後重新生成每個更新的XML?

0

我應該用另一臺用於此目的?

不一定,當你不需要它時,你只需要確保你沒有選擇查詢中的圖像字段,但是如果你想非規範化你的模式,你可以使用另一個表格,當你需要圖像時一個join

2

嗯,它有點「內在平臺」,但它會工作。單獨的表將允許更好的圖像查詢,但在某些RDBMS平臺上,這也可以通過XML類型的列和SQL/XML來實現。

如果這個數據只能是不透明的存儲,那麼也許。但是,請記住,您通常必須將整個XML帶回到應用程序層以執行任何有趣的操作(或者:根據平臺使用SQL/XML,但我建議不要這樣做,因爲DB不是'在大多數情況下是做這種處理的地方)。

我在所有其他情況下的建議:單獨的表格。