【发布时间】:2015-11-20 23:06:50
【问题描述】:
假设您想为每条电影记录记录三个数字...假设:release_year、:box_office 和:budget。
通常,使用 Rails,您只需将这三个属性添加到 Movie 模型中,然后调用 @movie.release_year、@movie.box_office 和 @movie.budget。
将所有三个数字压缩到一个伞列中是否会节省任何数据库空间或提供任何其他好处?
所以当添加三个数字时,它会变成这样:
def update
...
@movie.umbrella = params[:movie_release_year]
+ "," + params[:movie_box_office] + "," + params[:movie_budget]
end
因此,最终的 @movie.umbrella 值将类似于“2015,617293,748273”。
然后在控制器中,要访问这三个值,就像
@umbrella_array = @movie.umbrella.strip.split(',').map(&:strip)
@release_year = @umbrella_array.first
@box_office = @umbrella_array.second
@budget = @umbrella_array.third
这样,它将是相同数量的数据(实际上多一点,带有额外的逗号),但只存储在一列中。这会比三列更好吗?
【问题讨论】:
-
请不要那样做。最小的空间节省,以及尝试再次拆分数据的资源浪费是可怕的。尝试加入表格也会很痛苦
-
@JuanCarlosOropeza 是否可以计算出它节省了多少空间?
-
@JeffCaros 这将占用更多空间,因为您不再存储 3 个整数,而是一个字符串。整数将占用更少的空间。
-
varlena 标头也占用空间。和分隔符。真的。 不要这样做。
-
@CraigRinger 什么是 varlena 标头?
标签: sql ruby-on-rails database postgresql database-optimization