首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >什么是最有效的方式使一个地方实体(城镇,城市,村庄等)与一个国家的实体?

什么是最有效的方式使一个地方实体(城镇,城市,村庄等)与一个国家的实体?
EN

Database Administration用户
提问于 2015-11-27 15:27:21
回答 2查看 96关注 0票数 0

我是数据库新手。

我有一个带有UserProfile实体的数据库。我需要添加一个国家和地区(城市,城镇,村庄)到UserProfile。

最有效的方法是什么?

这就是我所拥有的:

局部性

  • PK联合国LocalityID
  • 联合国LocalityName

Country

  • PK联合国CountryID
  • 联合国CountryName

UserProfile

  • Username...Password...etc
  • FK CountryID
  • FK LocalityID
EN

回答 2

Database Administration用户

回答已采纳

发布于 2015-11-27 16:35:10

在关系数据库术语中,效率的核心是避免数据的重复。你在问题中显示的3张表格似乎是合理的,前提是:

  • 你可以在没有国家的情况下拥有一个地方
  • 你可以拥有一个没有地方的国家

这实际上是一个相当可行的设计,因为在世界上的一些地方,他们可能没有定义的位置,如您所描述的。(地球上有很多独特的决定。)当然,如果需要的话,您可以为跟踪目的生成一个人为的名称或描述。

例如:没有命名的地方,您可以创建一个类似于“咸水岛NW”的地方。

如果您打算让每个地区都属于一个国家,那么您可能会从添加一个CountryLocality表的小更改中获益:

局部性

  • PK联合国LocalityID
  • 联合国LocalityName

Country

  • PK联合国CountryID
  • 联合国CountryName

CountryLocality

  • PK联合国CountryLocalityID
  • FK CountryID
  • FK LocalityID

UserProfile

  • Username...Password...etc
  • FK CountryLocalityID

这无疑是一个需要您决定的设计和使用问题,因为CountryLocality表增加了一些开销。这取决于国家-地方连接应该有多强,以及这个额外的步骤对于您的应用程序是否值得。

票数 1
EN

Database Administration用户

发布于 2015-11-28 06:17:26

从本地表和国家表中删除ID列可能会更好。否则,您可能会有重复或不正确的名称,因为ID是不同的。国家表可以让世界上每一个国家都很容易地填写,并用于查找,而不是数据输入。只有局部性表才需要一些新记录的数据输入。

CountryLocality表中的ID列将有助于组合的唯一性。

如果您知道每个UserProfile都有本地和国家,那么就可以消除CountryLocality的ID字段,只需创建LocalityName和CountryName的复合键。这种情况可能不是这样,而且可能会使将来的更新变得棘手(对于更改地名的情况)。

票数 0
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/122291

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档