在数据库表中定义条件逻辑

时间:2019-04-23 19:45:35

标签: sql sql-server

我有一个ClientLookupTable和一个LookupTable,如下所示。

![enter image description here

ClientLookupTable指定客户端需要哪些查找项目。 这很容易做到,因为我可以打开和关闭isRequired标志。 但是,我需要做的是LookupTableId 19或6和20。 我不确定如何为此要求设计数据库表。

ClientLookupTable中的数据将被另一个客户端应用程序使用。但是我们需要定义一个特定的客户端(3),它们所需要的是WID(19)或SSN或DOB。

1 个答案:

答案 0 :(得分:1)

可以向表添加触发器或检查约束。这将保证数据满足条件之一。对于约束,您需要定义一个用户定义的函数。

但是,我强烈不建议这样做。多行约束的问题是您不能向表添加一行。它不会满足约束条件。这可能使插入新行和更新现有行变得困难。

一种可能是旋转列:

id    clientId    needs_wid    needs_ssn    needsdob
139      3            1            0            0

然后一个简单的check约束起作用:

add constraint chk_ClientLookupTable_required
    check ( (needs_wid = 1) or (needs_ssn = 1 and needsdob = 1) )

为了确保灵活性,我确定您将数据放在单独的行中。不幸的是,这失去了灵活性。您可以将列替换为JSON或XML,以重新建立灵活性。