我目前有以下 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 视图
还有另一种(更好的)方法吗?如果不是 - 哪种方法是最佳实践?我的数据库设计是否缺乏,整个问题可以以某种方式规避?