Sql 在数据库表中定义条件逻辑
我有一个Sql 在数据库表中定义条件逻辑,sql,sql-server,Sql,Sql Server,我有一个ClientLookupTable和一个LookupTable,如下所示 ClientLookupTable指定客户端需要哪些查找项。 这很容易做到,因为我可以打开和关闭isRequired标志。 但是,我需要做的是要求LookupTableId19或者同时要求6和20。 我不知道如何着手为这个需求设计数据库表 ClientLookupTable中的数据将被另一个客户端应用程序使用。但是我们需要定义,对于一个特定的客户机(3),他们需要的是WID(19)或SSN或DOB 您可以向表中添
ClientLookupTable
和一个LookupTable
,如下所示
ClientLookupTable
指定客户端需要哪些查找项。
这很容易做到,因为我可以打开和关闭isRequired
标志。
但是,我需要做的是要求LookupTableId
19或者同时要求6和20。
我不知道如何着手为这个需求设计数据库表
ClientLookupTable
中的数据将被另一个客户端应用程序使用。但是我们需要定义,对于一个特定的客户机(3),他们需要的是WID(19)或SSN或DOB 您可以向表中添加触发器或检查约束。这将保证数据满足其中一个条件。对于约束,您需要定义一个用户定义的函数
但是,我强烈不建议这样做。多行约束的问题是不能向表中添加一行。它不会满足约束条件。这会使插入新行和更新现有行变得困难
一种可能是以支柱为轴心:
id clientId needs_wid needs_ssn needsdob
139 3 1 0 0
然后,一个简单的检查约束起作用:
add constraint chk_ClientLookupTable_required
check ( (needs_wid = 1) or (needs_ssn = 1 and needsdob = 1) )
我确信您将数据放在不同的行中以获得灵活性。不幸的是,这失去了灵活性。您可以用JSON或XML替换这些列,以重新建立灵活性。没有足够的信息说明您想要做什么。请解释更多细节和预期结果,并以代码而非图像的形式提供示例数据。能否在ClientLookupTable
中添加一个新列,指定不同的选项及其优先级。可能是一个名为options
的整数列,因此19
将是1
,然后6
和20
将是2
@LuisCazares,我添加了其他信息。但基本上我只需要能够在数据库表中定义客户机是否需要提供所有3个或其中的1个。我不确定这在数据库级别是否可行。在表级别,这称为约束。但是,由于您希望将它们“打开”和“关闭”,因此最好在insert
和update
语句中处理这些问题。@jnevil,这听起来似乎可行。我会试试看,看看效果如何。谢谢