我想选择检索人员,并进一步进行一些插入,删除和更新.
如果我想找回居住在巴西的人最好的方法是什么?
在表人中制作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:
>专业:更简单,更清洁的模型,无冗余,更易于维护
>缺点:性能较慢,查询更复杂,可根据土地进行人员追溯(简单查询)
因此,第一个解决方案有效地为您提供了更简单的查询结构和更好的性能,可以按国家/地区检索人员(您想要的),但它有其成本(参见优缺点).另一方面,务实的思考认为,国家 – 城市数据非常稳定,而且经常不会改变,这一事实有利于第一种解决方案.
如果这种非规范化和轻微的不一致的可能性,你可以采取第一种解决方案.