假设你想为每一部电影记录三个数字.比方说,: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值将是“2015617293,748273”。
然后在控制器中,要访问这三个值,应该是这样的
@umbrella_array = @movie.umbrella.strip.split(',').map(&:strip)
@release_year = @umbrella_array.first
@box_office = @umbrella_array.second
@budget = @umbrella_array.third这样,它将是相同数量的数据(实际上更多一点,加上额外的逗号),但只存储在一列。这会比三栏更好吗?
发布于 2015-11-20 23:23:02
在一列中压缩这些属性没有好处。实际上,遵循这条路径将增加代码的复杂性,并将限制您的功能。
以下是您可能面临的一些问题:
..。我可以继续。没有好处,只有缺点。
发布于 2015-11-20 23:27:41
同意上面的评论,作为一个例子,尝试使用pg_column_size()来比较结果:
WITH test(data_txt,data_int,data_date) AS ( VALUES
('9999'::TEXT,9999::INTEGER,'2015-01-01'::DATE),
('99999999'::TEXT,99999999::INTEGER,'2015-02-02'::DATE),
('2015-02-02'::TEXT,99999999::INTEGER,'2015-02-02'::DATE)
)
SELECT pg_column_size(data_txt) AS txt_size,
pg_column_size(data_int) AS int_size,
pg_column_size(data_date) AS date_size
FROM test;结果是:
txt_size | int_size | date_size
----------+----------+-----------
5 | 4 | 4
9 | 4 | 4
11 | 4 | 4
(3 rows)https://stackoverflow.com/questions/33837548
复制相似问题