假设我有一个包含博客的表。 架构如下:
ID (int)| Title (varchar 50) | Value (longtext) | Images (longtext)| ....
在图像字段中,我存储与博客相关联的图像的XML序列化列表。
我应该为此目的使用另一张桌子吗?
答案 0 :(得分:2)
是的,您应该将图像放在另一个表中。在同一个字段中有多个值表示非规范化数据,并且很难使用数据库。
与所有规则一样,有一些例外情况,将具有多个值的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
。