我有一个ClientLookupTable
和一个LookupTable
,如下所示。
ClientLookupTable
指定客户端需要哪些查找项目。
这很容易做到,因为我可以打开和关闭isRequired
标志。
但是,我需要做的是LookupTableId
19或6和20。
我不确定如何为此要求设计数据库表。
ClientLookupTable
中的数据将被另一个客户端应用程序使用。但是我们需要定义一个特定的客户端(3),它们所需要的是WID(19)或SSN或DOB。
答案 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,以重新建立灵活性。