Postgres"反向"外键约束

时间:2017-02-10 16:33:45

标签: postgresql database-design constraints

我不确定描述这个的最好方法,所以请耐心等待。

我有一个与俄克拉荷马州的植物和动物物种有关的数据库。其中一个表,acctax(接受的分类法),包含给定分类单元的可接受名称。另一个表格语法(同义词分类法)包含分类单元的同义词(一对多关系)。

我们设计了一个基于分类单元科学二项式的代码(称为acode),以唯一地识别每个代码。例如,美洲野牛( Bison bison )具有唯一代码M-BIBI。在acctax表中,这是主键。如果另一个分类单元具有相似的二项式(例如,一个通用和特定名称都以Bi开头的哺乳动物,我们只会在它之后添加一个序列号,例如M-BIBI2 - 幸运的是,在这种情况下,这只是假设,没有这种情况)。

语法表通过此代码与acctax表相关。但是,我们还使用相同的约定(称为scode)为每个同义词分配唯一标识符。这是语法表中的主键。

如果变得荒谬乏味,分类标准偶尔会发生变化。可接受的名称可以成为同义词,同义词可以成为可接受的名称。因此,我绝对需要确保没有新分配的" acode"已被用作" scode"在语法表中并没有新分配" scode"尚未被用作" acode"在acctax表中。

为了部分解决这个问题,我创建了一个视图,分别从acctax和语法表中对acode和scode进行联合。在添加新记录之前,我可以查询视图以查看是否已在使用新创建的代码。但是,我希望有一个约束,只允许在acctax和语法表中插入新的acode或scode,如果该代码在我创建的视图中已经存在 not

希望这是有道理的。我意识到它很漫长而且很复杂。

0 个答案:

没有答案