使用逗号分隔字段是否良好

时间:2018-04-02 19:23:55

标签: sql sqldatatypes

我有一张名为buildings的表格 每栋建筑都有零 - n图像

我有两个解决方案

使用两个表的第一个(经典解决方案):

buildings(id, name, address)
building_images(id, building_id, image_url)

和使用olny one table的第二个解决方案

buildings(id, name, address, image_urls_csv)

鉴于我不需要显式搜索图片网址, 我认为第二个解决方案(使用image_urls_csv列)更容易使用,并且不需要创建另一个表来保存图像,我也将避免多次查询或加入的麻烦。

问题是,如果我真的不想按字段值过滤,搜索或分组,我可以将其设为CSV吗?

2 个答案:

答案 0 :(得分:1)

一方面,通过简单地使用image_urls_list列来避免连接或多个查询,是的。单一往返数据包总是一个加号。

另一方面,您有一串需要解析的网址。当URL中有逗号时会发生什么?哦,我知道,你引用它。但是现在你需要一个超出逗号简单天真分裂的解析器。然后,从现在开始三个月,有人会问你哪些建筑物共享一个给定的图像,并且你将通过扭曲处理引号,而不是引号,以及位于字符串开头或结尾的条目(和因此,两边都没有逗号)。您将开始编写一些SQL来处理所有这些,然后再说一遍并将其推送到您的更高级语言来解析每个条目并判断给定图像是否在那里,并发现这是很慢,虽然你会意识到你至少可以找%<url>%来限制它,但是现在你花了更多的时间来试图破解你把所有东西都放进去的性能改进通过避免连接而保存的单个条目。

一年之后,有人会给你一个有这么多网址的建筑物,它会溢出你为该领域投入的文字限制,打破了整个事情。或者为每个额外的元数据添加一些额外的字段(&#34;最后更新&#34;,&#34;到期&#34;,...)。

所以,是的,你绝对可以在这里输入一个URL列表。如果这是postgres或任何其他具有数组作为第一类字段类型的数据库,那可能没问题。但要帮自己一个忙,并将它们分开。这是一个适度的前期疼痛,长期的收获可能会让你非常开心。

答案 1 :(得分:0)

不会

&#34;鉴于我不需要按图片网址搜索,显然&#34;假设您无法建立数据库。即使您最终没有按网址搜索,也可以添加构建图像的其他属性,例如标题,alt标签,宽度,高度等,因此您最终必须序列化该列中的所有这些数据,并且那么你将无法索引任何一个。另外,如果您使用一种语言对其进行序列化,那么您或使用其他语言的任何人都将需要安装一些第三方库来反序列化您的内容或编写自己的反序列化函数。

我能想到的唯一一个在数据库中保存序列化数据的地方就是当你继承旧的软件时你还没有时间修复它。