序列化还是使用单独的模型?

时间:2012-03-26 05:12:29

标签: ruby-on-rails ruby-on-rails-3

我有一个城市模型,每个城市都有模型CombatUnit中指定的战斗单位。我最初创建了一个有很多通过city_combat_units的关联,但我不太确定这是否真的是最好的方法。

由于有10种不同类型的作战单位,因此有很多重复:

(city_id, combat_unit_id, number) => (1,1,10)
(city_id, combat_unit_id, number) => (1,2,4)
(city_id, combat_unit_id, number) => (1,3,9)

你明白了。所以,我很想知道。是否可以更好地使城市有一个combat_units_list,其中list属性只是一个包含单位名称和数字的序列化哈希?

这是个好主意吗?它会多才多艺吗?

2 个答案:

答案 0 :(得分:1)

序列化属性的获取速度可能更快,但更改速度要慢得多。将条目添加到大型列表将需要重新写入整个列表,并附加新条目。他们还遇到竞争条件,其中一个更新可能被另一个更新。连接模型几乎总是最可靠的方法。

如果要获得序列化列表的性能,请将其作为连接记录的缓存,以便在它确实损坏时可以重建它。创建连接模型通常很简单,它可以轻松容纳示例中的number等元数据。

答案 1 :(得分:1)

通常情况下,我建议您坚持使用当前的模型,这样可以更轻松地操纵城市与战斗单位之间的关系。是的,你会有一些微小的重复ID,但它比你提出的序列化列表更清晰。

我还可以想象一些情况,例如,如果你需要知道有多少个城市有10个类型2的战斗单位,那么将关系映射到表格会有所帮助,用你当前的设置来回答这个问题很简单,另一个解决方案意味着解析每个城市的列表,然后找到一些算法来回答问题。

您将在数据库中保存一些字节,但是使用查询逻辑加载代码(如果您问我,这应该是数据库引擎的责任)。

总而言之,除非你的真的需要序列化选项进行某种奇怪的优化,否则我建议坚持使用你的表格。