数据库字段中的XMLSerialized对象。这是好的设计吗?

时间:2012-01-08 19:36:52

标签: c# asp.net mysql database xml-serialization

假设我有一个包含博客的表。 架构如下:

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

在图像字段中,我存储与博客相关联的图像的XML序列化列表。

我应该为此目的使用另一张桌子吗?

5 个答案:

答案 0 :(得分:2)

是的,您应该将图像放在另一个表中。在同一个字段中有多个值表示非规范化数据,并且很难使用数据库。

与所有规则一样,有一些例外情况,将具有多个值的XML放在数据库的一个字段中是有意义的。第一条规则是:

  

数据应始终一起读/写。无需只读取或更新其中一个值。

如果满足要求,可以有多种理由将数据放在一个字段中:

  • 存储效率,如果空间已被证明是一个问题。
  • 检索效率,如果性能已被证明是一个问题。
  • 模式灵活性;其中一个XML字段可以消除数十或数百个不同的表。

答案 1 :(得分:2)

我当然会使用另一张桌子。如果您使用XML,当您需要浏览并更新对所有图像的引用时会发生什么? (您是否只需要执行Update blog_images Set ...,或者为每行解析XML,进行更新,然后为每个更新生成更新的XML?

答案 2 :(得分:2)

嗯,这是一个“内部平台”,但它会起作用。一个单独的表可以实现更好的图像查询,尽管在某些RDBMS平台上也可以通过XML类型的列和SQL / XML来实现。

如果这个数据只需要是不透明的存储,那么也许。但是,请记住,您通常必须将整个XML带回应用程序层以执行任何有趣的操作(或者:取决于平台,使用SQL / XML,但我建议不要这样做,因为数据库不是'在大多数情况下进行此类处理的地方)。

我在所有其他情况下的建议:单独表格。

答案 3 :(得分:1)

这取决于您是否需要查询实际图像数据本身。如果您发现可能需要查询某些图像或具有某些属性的图像,那么最好以不同的方式存储该图像数据。

否则,请保持原样。

但请记住,只在需要时才包含SELECT中的字段。

答案 4 :(得分:0)

  

我应该为此目的使用另一张桌子吗?

不一定。您只需确保在不需要时不在查询中选择图像字段。但是如果你想对你的模式进行非规范化,你可以使用另一个表,当你需要时,你可以执行join