数据库模式规范化

Database Schema Normalisation

我正在尝试建立一个数据库模型来保存(大部分)英国人口普查记录信息。那些比我理解得更好的人会不会快速浏览一下下面的数据库模式草案,并告诉我我的规范化是否正确,或者我是否犯了任何明显的错误?

Census Draft Database Schema

我认为这是相对不言自明的,但由于我多年来没有接触过数据库设计,忽略了 tbPerson 和 tbLocation,我的想法是我需要两个 link 表,因为首先一个人可以出现在许多人口普查......其次是人口普查,可以有很多地址。这个设计草案有效吗? link 表格现在仍然是做事的最佳方式吗??

一般评论:

  • 多重关系是错误的:大多数1:1是1:n; 1:n 你看错了方向 - 肯定是 1 人 有 n 个 PersonCensus 而你有 1 个 PersonCensus 到 n 个 Persons。
  • 地址和位置位看起来让我很困惑。你不能link一个人按照你的方式去一个地址。
  • 在 PersonCensus 中,您有一种关系,大概是与另一个人的关系。没有办法 link PersonCensus 或它所拥有的人给另一个 PersonCensus 或人。

也就是说,Link 表格仍然是处理 n:n 关系的正确方法,PersonCensus 非常明智。

编辑 - 添加位置内容。

Location 的问题是 PersonCensus 被 linked 到一个 Location(可以有许多 PersonCensus 的 linked 到它)。此外,一个地址被 linked 到一个位置(可以有多个地址 linked 到它)。因此,您可以从 PersonCensus 转到他们的位置,但是您有许多地址 linked 到位置。 PersonCensus 的地址是哪一个?没办法说。

如果除了显示 PersonCensus lived/worked/whatever 在人口普查时的位置以外,还有其他原因存在地址,那么我不知道那个目的是什么,因此无法发表任何进一步的评论.

但是,如果地址应该 linked 到 PersonCensus,那么按照设计它是无用的。要 link PersonCensus 到地址,请从 PersonCensus 中删除 LocationId 并替换为 AddressId。现在,PersonCensus link首先被编辑到地址,然后是位置。

现在我将停止更新此内容,因为如果您有更多问题,您确实需要提出另一个问题,更好地描述您在做什么。干杯-