比方说,我有一个包含几列[a, b, c, d]
的表,它们都可以为空。该表由Typeorm管理。
我想在[a, b, c]
上创建唯一约束。但是,如果这些列之一为NULL,则此约束不起作用。我可以插入例如[a=0, b= 1, c=NULL, d=0]
和[a=0, b= 1, c=NULL, d=1]
,其中d
具有不同的值。
使用原始SQL,我可以设置多个部分约束(Create unique constraint with null columns),但就我而言,唯一约束位于10列上。为每种可能的组合设置约束似乎是荒谬的。
我还可以创建某种哈希函数,但是这种方法对我来说似乎不合适?
Typeorm是否可以为此类情况提供解决方案?
答案 0 :(得分:1)
如果您的值永远不会出现在这些列中,则可以将它们用作索引中的替换项:
NULL
这样,numeric
值在索引内的处理方式相同,而无需在表中使用它们。
如果使用float
的那些列是integer
或bigint
(而不是'-Infinity'
或select *
from the_table
where a = 10
and b = 100;
),则可能是更好的替换值。
这有一个缺点:
但是,除非您也使用coalesce()表达式,否则该索引将无法用于这些列的查询。因此,使用上述索引进行查询,例如:
select *
from the_table
where coalesce(a, -1) = 10
and coalesce(b, -1) = 100;
不使用索引。您将需要使用与索引本身相同的表达式:
QStringList::operator[]()