我目前有以下 PostgreSQL 数据库(图片仅包含基本组件):

基本上:每个 TX 都有一些 TXIN 和一些 TXOUT,每个 TXIN 由一个 TXOUT 环(门罗币交易)组成
如果我将ring表与txin我使用的表连接起来select * from ring natural join txin,它inid用于连接。和相同ring,txout除了它加入outid.
两者txin和txout也可以通过自然连接进行连接tx以获得合理的输出。
唯一(预期)不起作用的是:
select * from txout natural join ring natural join txin;
因为它然后加入ring(inid) = txin(inid)和ring(outid) = txout(outid)(这是需要的)但也是txin(txid) = txout(txid)不希望的。
我有一些想法如何解决这个问题:
使用显式连接(在我看来使一些查询非常麻烦),例如上面的内容是:
select * from txout join ring using (outid) join txin using (inid);重命名 txin 或 txout 中的两个 txid 列之一,并放弃与 tx 的自然连接
使用忽略这些操作的 txid 的 txin/txout 视图
还有另一种(更好的)方法吗?如果不是 - 哪种方法是最佳实践?我的数据库设计是否缺乏,整个问题可以以某种方式规避?