在以下情況:是否存在將冗餘數據存儲在數據庫中以提高速度的情況?
user has many bags
bag has many items
users
-id
bags
-id
-user_id
items
-id
-bag_id
有2種方式來獲得訪問用戶的項目。
1)可以將實例方法添加到用戶,該用戶遍歷每個用戶的行李,並將行李的物品收集到數組中以返回。在Ruby on Rails的,是這樣的:
#in user.rb
def items
items = []
bags.includes(:items).each { |bag| items += bag.items }
end
2)直接添加user_id
屬性的項目表,並添加一個額外的關係,使user has many items
。然後做user.items
。
的第二方法是更快的,但涉及到存儲冗餘數據。有沒有情況下實施它是有道理的?
請注意,如果你非規範化,必須使用觸發器,以確保非規範化的數據停留在同步,否則就會有數據完整性問題。 – HLGEM