首页 > 解决方案 > 如何将一行与同一个表中的其他几行关联起来?

问题描述

在我的情况下,我有一张邮政编码表。我希望每一行都有一个周围邮政编码的列表。

使用我正在开发的应用程序,我希望能够按邮政编码/郊区搜索并包括附近的邮政编码。说2英里以内。我知道如何识别郊区周围的邮政编码,但不知道如何关联这些,以便我可以在我的模型中检索周围郊区的邮政编码。

例如,在下面,邮政编码0001可能被0003, 和0004

id | postcodes         
1  | 0001          
2  | 0002
3  | 0003
4  | 0004

我非常不确定如何构建这个模型。我需要一个单独的表来将邮政编码与其邻居相关联吗?这可以在一张桌子内完成吗?

如果有帮助,我正在使用 Python SQLAlchemy ORM 运行 PostgreSQL。

谢谢你的帮助。很高兴回答任何有帮助的问题。

标签: sqlpostgresqlsqlalchemy

解决方案


这是一件棘手的事情,因为这本质上是“图形”数据,而且很难处理。几个问题:

那些“周边”代码是否可以根据表中的数据计算得出?还是表中需要设置的魔法知识?

添加行时是否有此问题,或者稍后会更新?

这会改变吗(最近?,经常?从来没有?)或者这是一个常量表?

您可以做的两件事是:1)使用此数据创建一个新表 2)创建一个新列,其中包含一个包含这些周围代码的数组。这甚至可以在 Postgress 中被有效地索引和搜索。

新表的缺点是它是一个新表。优点是您可以将列定义为外键,如果您删除,您可以利用这一点。

带有数组的列的优点是您不需要新表,但缺点是您不能将其定义为外键,因此如果删除任何代码,您将负责编写某种程序来清除这些代码数组。

这看起来像这样:

id | postcodes | adjecent
1  | 0001      | {0003, 0004, ...}
2  | 0002      | {...}
3  | 0003      | {0001, ...}
4  | 0004      | {0001, ...}

新表可以是一个简单的数据透视表:

id | adjecent
1  | 3
1  | 4
3  | 1
4  | 1

或更复杂的数组表:

id | adjecent
1  | {3, 4}
3  | {1}
4  | {1}

请记住,如果您使用数组,则您正在使用该外键信息。


推荐阅读