gpt4 book ai didi

database - 在某些情况下,将冗余数据存储在数据库中以提高速度是否有意义?

转载 作者:搜寻专家 更新时间:2023-10-30 19:40:24 25 4
gpt4 key购买 nike

在以下情况下:

user has many bags
bag has many items

users
-id

bags
-id
-user_id

items
-id
-bag_id

有两种方法可以访问用户的项目。

1) 可以给用户添加一个实例方法,它会遍历用户的每个包,并将包中的元素收集到一个数组中返回。在 Ruby on Rails 中,类似于:

#in user.rb
def items
items = []
bags.includes(:items).each { |bag| items += bag.items }
end

2)直接在items表中添加一个user_id属性,并添加一个附加关系,这样user有很多items。然后只需执行 user.items

第二种方法会更快,但涉及存储冗余数据。是否存在实现它有意义的情况?

最佳答案

是的,在某些情况下,为了性能而引入一些受控冗余确实是有意义的。通常,只有在数据库无法满足其性能要求时才应这样做。这称为“非规范化”,您必须考虑的是:

  • 可以使实现更加复杂
  • 经常牺牲灵 active
  • 可能会加快检索速度但会减慢更新速度(因为您现在必须更新多个位置)

因此,在性能不理想且关系具有低更新率和高查询率的情况下,需要考虑这一点。

还有一些非规范化的数据库设计,如星型模式,用于数据库仓储。

关于database - 在某些情况下,将冗余数据存储在数据库中以提高速度是否有意义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16753095/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com