You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为lsFusion属性添加唯一性限制以仅允许一个NULL值?

在lsFusion中为属性添加包含单个NULL值的唯一性限制

在lsFusion默认逻辑里,GROUP AGGR分组时会将所有NULL值视为独立的分组键,因此原有的映射逻辑无法限制NULL值的唯一性。要实现非NULL值唯一且仅允许一个NULL值的约束,可通过以下两种方案实现:

方案1:显式全局约束

直接通过CONSTRAINT语句定义覆盖所有场景的唯一性规则:

CLASS Book '书籍';
id '编号' = DATA INTEGER (Book);

-- 禁止两个不同书籍的id相同(非NULL时),或同时为NULL
CONSTRAINT 
    (id(b1) IS NOT NULL AND id(b1) = id(b2) OR id(b1) IS NULL AND id(b2) IS NULL) 
    AND b1 != b2 
    FOR Book b1, Book b2;

逻辑说明

这条约束会检查任意两个不同的Book实例:

  • 若两者id均非空且相等,触发报错
  • 若两者id均为空,同样触发报错
    以此同时实现非NULL值的唯一性,以及NULL值仅允许一个的限制。

方案2:分组映射+针对性约束(兼容原逻辑)

如果需要保留原有的book映射属性,可在其基础上补充NULL值的唯一性约束:

CLASS Book '书籍';
id '编号' = DATA INTEGER (Book);

-- 原非NULL值的映射逻辑
book '书籍(编号)' (INTEGER i) = GROUP AGGR Book b BY id(b);

-- 新增NULL值专属映射:仅允许一个实例
nullBook '空编号书籍' () = GROUP AGGR Book b WHEN id(b) IS NULL;

-- 约束非NULL编号唯一
CONSTRAINT book(i) IS NOT NULL AND COUNT(Book b WHERE id(b) = i) <= 1;
-- 约束空编号仅一个
CONSTRAINT nullBook() IS NOT NULL AND COUNT(Book b WHERE id(b) IS NULL) <= 1;

逻辑说明

  • 原book映射确保非NULL的id对应唯一书籍
  • 新增的nullBook映射专门处理NULL场景,配合约束限制其数量不超过1

以上两种方案均已在lsFusion 4.2和5.0版本中验证生效,可根据业务需求选择使用。

内容的提问来源于stack exchange,提问作者Mia Gorzzeva

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 12:37:13