繁体   English   中英

如何拆分表以进行有效的数据库设计?

[英]How to split tables for effective database design?

假设我的数据库中有3个表,每个表代表一种特定类型的土地,这些土地的大小有所不同。 首先,我有一条线,它代表最大的土地实体。 每行包含许多较小的土地实体项目。 每个项目都包含许多最小的图块。

我为他们每个人创建了一个表格,以存储他们的信息。 但是,我注意到它们有一些共同的列,例如州,镇和城市,而且这些列可以包含重复的信息:许多地块可以位于相同的州和城市,因此我们将在许多地方重复相同的信息。行。

我有三个问题:

1-如何有效地拆分表以避免冗余? 我坚决要为地理信息创建一个新表,但是如何组织数据以避免该表中的冗余呢?

2-由于一条线包含许多项目,而该项目本身包含许多图; 这意味着一条线包含许多图。 然后,是否应该在图与线和项目之间创建FK关系?

3-如果我为地理信息创建另一个表,那么主键的最佳选择是什么? (以便在其他表中将其用作FK)。

1-如何有效地拆分表以避免冗余? 我坚决要为地理信息创建一个新表,但是如何组织数据以避免该表中的冗余呢?

您可以创建一个具有idstatetowncity字段以及一个复合唯一键的address表,该键涵盖id以外的所有字段。 您的每个地块表都会通过PK引用此address表。 仅当您具有一些新的地址组合时,才需要将数据插入此表中。 但这会增加支持成本,我不认为您应该这样做。 我可以进行类似的复制(假设您只在土地图表中存储州,城市等的ID)。

2-由于一条线包含许多项目,而该项目本身包含许多图; 这意味着一条线包含许多图。 然后,是否应该在图与线和项目之间创建FK关系?

否。除非您有充分的理由违反此规则,否则孩子通常只应参考其直接父母。

3-如果我为地理信息创建另一个表,那么主键的最佳选择是什么? (以便在其他表中将其用作FK)。

我相信如果您像这样创建表,可以在这里使用代理主键: idstate_idtown_idcity_id 但是,正如我所说,我认为这种标准化程度不是必需的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM