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

我想选择检索人员,并进一步进行一些插入,删除和更新.

如果我想找回居住在巴西的人最好的方法是什么?

在表人中制作2个外国城市和国家:

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

或者只是桌面城市中的一个外键和表城市中的另一个外键县

Person(id,**id_country**)   
countries (id,country)

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

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

解决方法

这个问题非常类似于你所做的那个问题:

Create many tables or just one

答案也是类似的 – 这取决于你想要达到的目标.两种解决方案都可以起作用,两者都有利有弊,应根据具体情况进行一些权衡分析.出于这种情况,不可能回答你的问题.

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

人(id,**** id_country ****,id_city)
城市(id,id_country)
国家(身份证,国家)

问题是“我们需要吗?”

那么,两种解决方案的优缺点:

1.解决方案:使用id_contry:

>专业人士:根据土地(更简单的查询)更轻松地回溯人员,并更好地执行此查询
>缺点:更复杂的数据库和更多的冗余,更多的机会在数据库中产生不一致,更难更新

2.解决方案:没有id_country:

>专业:更简单,更清洁的模型,无冗余,更易于维护
>缺点:性能较慢,查询更复杂,可根据土地进行人员追溯(简单查询)

因此,第一个解决方案有效地为您提供了更简单的查询结构和更好的性能,可以按国家/地区检索人员(您想要的),但它有其成本(参见优缺点).另一方面,务实的思考认为,国家 – 城市数据非常稳定,而且经常不会改变,这一事实有利于第一种解决方案.

如果这种非规范化和轻微的不一致的可能性,你可以采取第一种解决方案.

相关文章

SELECT a.*,b.dp_name,c.pa_name,fm_name=(CASE WHEN a.fm_n...
if not exists(select name from syscolumns where name=&am...
select a.*,pano=a.pa_no,b.pa_name,f.dp_name,e.fw_state_n...
要在 SQL Server 2019 中设置定时自动重启,可以使用 Window...
您收到的错误消息表明数据库 'EastRiver' 的...
首先我需要查询出需要使用SQL Server Profiler跟踪的数据库标...