代码之家  ›  专栏  ›  技术社区  ›  andyortlieb

列和(许多可能的)表之间的SQL引用完整性

  •  1
  • andyortlieb  · 技术社区  · 14 年前

    这是一个更好奇的时刻,但让我们想象一个环境,我比尔对坚定的镍币&一分为二。我有许多操作,我的系统做,他们都是收费的。所有这些操作都记录在不同的表中(这些表需要分开,因为它们记录的信息种类非常不同)。我还想微观管理我的应收账款(请原谅,如果您发现这里有不一致的地方,因为这个例子不是真实的情况)

    其中一个想法是,在记录帐户活动时,我可以引用操作的标识符以及操作(特别是它所在的表)并使用CHECK约束。这可能是最好的方法,这样我的日记就不会模棱两可了。

    有没有其他方法来解决这个问题,事实上还是专有的?

    非关系数据库能解决这个问题吗?

    编辑:

    我的第一个问题是,

    有没有一种标准的方法来替换一个外键,可以验证我的账单表的X列中的标识符是多个表中的一个现有标识符( )操作记录表?

    3 回复  |  直到 14 年前
        1
  •  3
  •   marc_s    14 年前

    不,用一个外键列是不可能做到这一点的。

    基本上你可以做两件事中的一件:

    或:

    • 每个主表都有一个“子”表,并且有一个适当的强制引用,并将这n个子表中的数据合并到一个视图(而不是一个表)中,以便进行报告/计费。

    或者完全忘记引用完整性-我肯定 推荐!

        3
  •  1
  •   HLGEM    14 年前

    另一种方法是通过触发器强制执行复杂的引用完整性规则。然而,由于不知道你的设计到底是什么,通常当这些类型的问题被问到时,它是围绕一个糟糕的设计工作。先看一下设计,看看是否可以修改它,使之成为可以通过FKs处理的东西,它们比通过触发器来处理这类事情更容易管理。

    另一种设计方法是拥有一个主表,它是具有不同细节的所有表的父表,并使用FK来处理它。