将可选1:1属性分解为各自独立的模型有什么优点和缺点?Rails ActiveRecord和DB规范化
例如,我正好遇到Rails代码是这样的:
class Dogs << ActiveRecord::Base
# :id (pk), :breed, :weight, :height, :tail_length
end
class DogSpotsInfo << ActiveRecord::Base
# :dog_id (pk), :spot_color, :avg_spot_size, :num_spots
end
但是,这是我会怎么做它(离开现场场NULL作为必要):
class Dogs << ActiveRecord::Base
# :id, :breed, :weight, :height, :tail_length, :spot_color, :avg_spot_size, :num_spots
end
在数据库级别,我相信唯一的区别是涉及可选属性的查询将需要另一个连接?
以前的方法还有其他的缺点吗?有没有优点?
编辑:
我想上一个巨大的狗表,其中说狗的20%,有斑点,也许一个亲前一种方法是更快顺序扫描,但我不是100%肯定的是,如果是那样的唯一的专家似乎是不成熟的优化。
我能想到的另一个功能是让模型更小巧整洁。但是,如果这是目标,也许你可以做到这一点,而不会影响数据库结构,通过类似has_spots :spot
?这里最好的做法是什么?
就我个人而言,我不是ActiveRecord的has_one关联类型的粉丝。只有一部分字段受到某些约束(例如,不兼容/不允许的列值组合)才有意义。人们不应该害怕数据库中的宽表,只要它们的索引正确。 – Toshio