小编典典

哪种数据库设计可提供更好的性能?

sql

我想select检索person并进一步进行一些插入,删除和更新。

如果我想找寻person谁住Brazil的最好的方法是什么?

制作2个外键citycountry在表中person

Person(id, name, profession, **id_country**, **id_city**)   
cities (id, city, **id_country**)  
countries (id, country)

或者只是一个外键citiesperson和其他外国键countycities

Person(id, name, profession, **id_city**)   
cities (id, city, **id_country**)   
countries (id, country)

或像第一个选项一样制作 视图

对于插入,删除和更新数据,它们仍然是最好的表吗?性能没有区别吗?我也很困惑,什么会影响架构的性能?


阅读 138

收藏
2021-04-07

共1个答案

小编典典

根据具体情况
进行一些权衡分析。在这种情况下,无法回答您的问题。

我在两个版本中看到的唯一区别是Person表中的外键id_country:

人(id,姓名,职业,* id_country *,id_city)
城市(id,城市,id_country)
国家(id,国家)

问题是“我们需要吗?”

因此,两种解决方案的利弊:

1.解决方案:使用id_contry:

  • 优点:更容易根据土地检索人(更简单的查询),并且此查询的性能更好
  • 缺点:更复杂的底层数据库和更多冗余,减少数据库中不一致的机会更大,更新难度更大

2.解决方案:不使用id_country:

  • 优点:更简洁的模型,无冗余,易于维护
  • 缺点:性能降低,基于土地的人员检索查询更复杂(查询更简单)

因此,第一种解决方案有效地为您提供了更简单的查询结构和更好的性能,可按国家(按需要)检索“人”,但是它有其成本(请见优点和缺点)。另一方面,务实的思想认为乡村城市的数据非常稳定且不经常更改,这一事实有利于第一种解决方案。

如果您可以忍受这种非规范化和出现不一致的可能性,则可以采用第一种解决方案。

2021-04-07