Database design 数据库表中的循环引用

Database design 数据库表中的循环引用,database-design,denormalization,banking,cyclic-reference,Database Design,Denormalization,Banking,Cyclic Reference,我很不好意思问这个问题,但最近出现了一种情况,我需要为三种相互关联的不同类型的银行实体创建一个表。让我解释一下 设想一个银行表,其中包含管理银行、经营农村分行的正规银行、在该银行下经营的农村分行或不属于该层级但仅与农村分行交易的零售银行分行的详细信息 在此之前,我决定为这些设置4个不同的表,并设置FK约束(即管理银行、经营农村分行的银行、农村分行和零售银行分行各一个)。但当我继续创建事务表时,我感到困惑,因为这些实体之间都可能发生事务(例如:农村分行和零售分行之间、农村分行之间等)。这意味着我不

我很不好意思问这个问题,但最近出现了一种情况,我需要为三种相互关联的不同类型的银行实体创建一个表。让我解释一下

设想一个银行表,其中包含管理银行、经营农村分行的正规银行、在该银行下经营的农村分行或不属于该层级但仅与农村分行交易的零售银行分行的详细信息

在此之前,我决定为这些设置4个不同的表,并设置FK约束(即管理银行、经营农村分行的银行、农村分行和零售银行分行各一个)。但当我继续创建事务表时,我感到困惑,因为这些实体之间都可能发生事务(例如:农村分行和零售分行之间、农村分行之间等)。这意味着我不仅要保留银行实体的“源”和“目的”ID的记录,还要保留一些数据,以帮助应用程序逻辑确定要加入哪个表进行查询。我觉得这很糟糕

此外,还有一个用户表,用户可能属于这些实体中的任何一个,这里也有4个不同的银行实体表存在问题。我如何知道用户是否属于农村分行、零售分行或监管银行

因此,我创建了一个银行表(本质上是因为它们是相似的实体,因为它们可以相互交易)。我在表中添加了一个父列,该列将保存父机构的ID值(我使用FKs实现的关系)。因此,农村分行的父列中将包含运营银行的ID。零售分行没有父行,因此该值在那里为空,依此类推

我现在看到的问题是,BANK表中有一个PK/FK关系,一个循环引用


我的问题是:这有多糟糕?有什么出路?

拥有自引用关系并不少见。一个缺点是许多RDBMS不允许您对自引用关系执行级联删除。除此之外,这种层次关系没有任何大的缺陷。许多数据库se解决方案甚至支持扩展功能以促进这种关系

  • 请参见关于使用执行分层查询的说明
  • 请参阅详细介绍自引用关系中使用的一些查询
此外,我建议您使用此银行表,但保留银行类型的辅助表,以便每个银行在银行表中都有一条记录,并且在其他一个表中也有一条记录,其中包含特定于银行类型的扩展属性。这样,关系仍然是集中的,使用rs仍然可以使用单个FK绑定到银行表,但是您的银行表不会被所有不同银行类型的扩展属性所混淆