目前这更像是一种好奇心,但让我们描绘一个环境,在这个环境中我会以坚定的镍币和硬币为基础。我的系统有很多操作,而且它们都是可计费的。所有这些操作都记录在各个表中(这些表需要分开,因为它们记录了非常不同类型的信息)。我还想微观管理我的应收账款。 (如果您发现此处存在不一致之处,请原谅我,因为此示例不是真实情况)
是否有一种标准的方法可以用一些东西替换外键,这种方法可以验证我的记帐表中X列中的标识符是许多操作记录表中的一个中的现有标识符?
一个想法是,在记录帐户活动时,我可以引用操作的标识符以及操作(特别是它所在的表)并使用CHECK约束。这可能是最好的方式,以便我的期刊不含糊不清。
还有其他方法可以解决这个问题吗,事实上还是专有的?
非关系数据库是否解决了这个问题?
修改
重新解释我最初的问题,
是否有一种标准的方法可以用一些东西来替换外键,这种方法可以验证我的记帐表中第X列中的标识符是多个(但不一定是所有)中的一个中的现有标识符操作记录表?
答案 0 :(得分:3)
不,使用单个外键列无法实现此目的。
你基本上可以做两件事之一:
或:
或者完全忘记参照完整性 - 我肯定不推荐!
答案 1 :(得分:2)
答案 2 :(得分:1)
另一种方法是通过触发器强制执行复杂的参照完整性规则。然而,并且不知道您的设计究竟是什么,通常在询问这些类型的问题时,它是围绕一个糟糕的设计。首先看看设计,看看你是否可以改变它来制作可以通过FK处理的东西,它们比通过触发器做这种事情更容易管理。
如果您确实采用了触发路径,请不要忘记强制执行更新以及插入,并确保您的触发器可以使用基于集合的多行插入和更新来正常工作。
设计替代方案是拥有amaster表,该表是所有表的父表,具有不同的详细信息,并使用FK。