2015-03-25 31 views
0

假设我在我的数据库中有3个表格,每个表格表示根据其大小区分的特定类型的土地。首先我有一条线,代表最大的土地实体。每条线包含许多较小的土地实体项目。每个项目都包含许多最小实体的地块。如何拆分表以实现有效的数据库设计?

我为它们中的每一个创建了一个表来存储它们的信息。然而,我注意到他们有一些共同的字段,例如州,城镇和城市,而且这些字段可以包含重复的信息:许多地块可以处于同一个州和城市,因此我们将拥有许多重复的信息行。

我有三个问题:

1-如何有效地拆分表以避免冗余?我致力于创建仅用于地理信息的新表,但如何组织数据以避免此表中的冗余?

2-由于一行包含很多项目本身包含很多地块;这意味着一条线包含许多图。那么我应该在剧情与线条和项目之间创建FK关系吗?

3-如果我为地理信息创建另一个表,对于它的主键有什么好的选择? (为了在其他表中使用它作为FK)。

回答

0

1-如何有效地拆分表以避免冗余?我 关于创建一个仅用于地理信息的新表,但如何组织数据以避免此表中的冗余?

您可以创建一个address表与idstatetowncity领域和复合唯一键,涵盖了各个领域,除了id。你的每块地块表将通过它的PK参考这个address表。只有当您有一些新的地址组合时,您才需要将数据插入到此表中。但是这会增加支持成本,我认为你不应该这样做。我相信这样的重复(假设,当然你只能在你的地块表中存储州,城市等)。

2-由于一行包含许多项目,其本身包含许多 地块;这意味着一条线包含许多图。那么我是否应该在剧情与线条和项目之间创建FK关系?

不可以。孩子通常只会提及他们的直系父母,除非您有充分理由违反此规定。

3-如果我为地理信息创建另一个表,那么 会是一个很好的主键选择吗? (为了在 其他表中使用它作为FK)。

我相信代理主键是确定在这里,如果你让你的表是这样的:idstate_idtown_idcity_id。但是,正如我所说的,我不认为这种正常化程度是必要的。