2015-12-02 62 views
0

我试图建模一个数据库来保存(大部分)英国人口普查记录信息。那些比我更好理解的人会快速浏览一下以下草案数据库模式并告诉我,如果我的规范化是正确的,还是我犯了明显的错误?数据库模式规范化

Census Draft Database Schema

我认为这是相当自我解释,但我还没有走近多年的数据库设计,而忽略tbPerson & tbLocation,思维去,我需要两个链接表,因为首先一个人可以在许多出现人口普查......其次是一次人口普查,可以有很多地址。这个设计草案是否有效?链接表仍然是这些天做事的最佳方式?

回答

0

总评:

  • 的多重关系是错误的:大多数的1:1是1:N; 你有1:n的人看错了方向 - 当然有1人 有n PersonCensus,你有1 PersonCensus n人。
  • 地址和位置对我来说看起来很混乱。您无法按照您拥有的方式将人员链接到地址。
  • 在PersonPensus内,你有一个关系,可能是另一个人。没有办法将PersonCensus或其拥有的Person链接到其他PersonCensus或Person。

这就是说,链接表仍然是正确的方式来执行n:n关系,PersonCensus是完全合理的。

编辑 - 添加位置的东西。

位置的问题是PersonCensus链接到一个位置(可能有许多PersonCensus链接到它)。另外,地址链接到一个地点(可以有多个地址链接到它)。所以你可以从PersonCensus到他们的位置,但是你有很多地址链接到位置。哪一个是PersonCensus的地址?没有办法告诉。

如果因为其他原因,除了显示PersonCensus居住/工作/人口普查时的任何其他原因,我不知道该目的是什么,因此不能作出任何进一步的评论。

但是,如果地址应该链接到PersonCensus,那么按照设计它是没用的。要将PersonCensus链接到Address,请从PersonCensus中删除LocationId,并用AddressId替换。现在PersonCensus首先连接到Address,然后连接到Location。

现在我将停止更新,因为如果您有更多问题,您确实需要更好地描述您正在做的事情,从而打开另一个问题。干杯 -

+0

对不起,我应该添加忽略关系标记(1:1,1:N等)我用Dia来绘制草稿并自动添加它们。无论如何,除了减少写下“儿子”,“妻子”,“头”之外,关系表并没有起作用,所以我并不太担心。至于地址和位置,我还没有完全正确地处理它...任何建议,以更好地安排它? – Gary

+0

不知道地址和位置之间的区别是什么,它们在这种情况下意味着什么。 –

+0

数据库中的位置表包含城镇或村庄的名称以及城镇/村庄和经度和纬度的简要说明。地址表是指一个人的住所或农场等物理地址。我想分开这两个,因为这似乎是规范化数据的合理方式。那有意义吗?因此,例如,没有多个地址/房屋条目都与每个记录中复制的城镇位置数据相同... – Gary