假设我的数据库中有3个表,每个表代表根据其大小区分的特定类型的土地。首先,我有一条线,代表最大的土地实体。每条线都包含许多较小的土地实体项目。每个项目都包含许多最小的实体图。
我为每一个创建了一个表来存储他们的信息。但是,我注意到他们有一些共同的列,例如州,城镇和城市,而且这些列可以包含重复的信息:许多地块可以在同一个州和城市,所以我们将在许多重复相同的信息行。
我有三个问题:
1-如何有效地拆分表以避免冗余?我只想为地理信息创建一个新表,但如何组织数据以避免此表中的冗余?
2-由于一行包含许多项目,这些项目本身包含许多图表;这意味着一行包含许多图。那么我应该在情节与线和项目之间创建一个FK关系吗?
3-如果我为地理信息创建另一个表,那么它的主键选择是什么? (为了在其他表中将其用作FK)。
答案 0 :(得分:0)
1-如何有效地拆分表以避免冗余?一世 为了创建一个仅用于地理信息的新表而努力,但是如何 组织数据以避免此表中的冗余?
您可以创建一个address
表,其中包含id
,state
,town
和city
字段以及复合唯一键,涵盖除{以外的所有字段{1}}。您的每个地块表都将通过它的PK参考此id
表。仅当您有一些新的地址组合时,才必须将数据插入此表。但这会增加支持成本,我认为你不应该这样做。我可以做一些类似的重复(假设你在地块表中只存储州,城市等的ID)。
2-由于一行包含许多本身包含许多项目 地块;这意味着一行包含许多图。我应该 在情节与线和项目之间创建FK关系?
没有。除非您有充分理由违反此规则,否则儿童通常只应提及其直系亲属。
3-如果我为地理信息创建另一个表,那将是什么 它是一个很好的主键选择吗? (为了将它用作FK中的 其他表)。
如果您按照以下方式制作表格,我相信代理主键就可以了:address
,id
,state_id
和town_id
。但是,正如我所说,我不认为这种程度的正常化是必要的。