从 SQL NULL 三值逻辑到华为平衡三进制芯片——一条穿越 70 年的"第三态"技术脉络
"三进制(Ternary)"在数据库与计算领域长期存在两种相互独立又偶有交集的含义:
三值逻辑(3VL)——以 TRUE / FALSE / UNKNOWN 处理 SQL NULL 缺失值的语义系统,
以及平衡三进制(Balanced Ternary)——以 -1 / 0 / +1 三态物理信号重构计算底层的硬件范式。
本综述梳理这两条线在 2024–2026 年的最新进展:PostgreSQL / MySQL / SQL Server 的 3VL 实现差异、
LPDDR5 PAM-3 物理层编码、华为 CN119652311A 平衡三进制逻辑门专利、TCAM 三态内容寻址、
量子-三进制接口研究,以及这些进展对下一代数据库引擎设计的启示。最后给出与本站
SKDB 项目的具体连接——如何在"基础"层面把三值谓词引入轻量级存储引擎。
关键词: Three-Valued Logic · Balanced Ternary · Setun · CN119652311A · TCAM · PAM-3 · NULL Handling · SKDB
当我们在 2026 年讨论"三进制数据库"时,通常会遇到一个概念混淆: 软件侧的"三值逻辑(Three-Valued Logic, 3VL)"与硬件侧的"平衡三进制(Balanced Ternary)" 虽然名字相近,指向的却是完全不同的研究脉络。
3VL(Three-Valued Logic)是逻辑学概念,SQL 用它来处理
NULL(表示"未知 / 缺失")。三值是 TRUE / FALSE / UNKNOWN。
它的关注点是语义——查询在 NULL 出现时应该如何回答。
Balanced Ternary(平衡三进制)是数值表示与硬件实现概念, 用 -1 / 0 / +1(或 0 / 1 / 2)替代二进制的 0 / 1。 关注点是物理——如何在硅片上稳定区分三种状态,以及如何用更少 bit 表示更大数值。
本综述把这两条线并置呈现,目的是回答一个问题:在 2026 年的工程语境下,
这两条线是否会再次交汇,以及对数据库内核(从 PostgreSQL 一直到我们自研的
SKDB)会产生什么具体影响。
SQL 标准在 ISO/IEC 9075 中明确把逻辑结果域从二值扩展为三值 {TRUE, FALSE, UNKNOWN}。主流 RDBMS 都遵循该规范,但在实现细节上各有差异。
AND │ T F U OR │ T F U NOT
─────┼─────────── ─────┼─────────── ────
T │ T F U T │ T T T T → F
F │ F F F F │ T F U F → T
U │ U F U U │ T U U U → U
| 场景 | PostgreSQL | MySQL | SQL Server | SQLite |
|---|---|---|---|---|
| NULL = NULL | UNKNOWN (→ 过滤掉) | NULL (等同 UNKNOWN) | UNKNOWN | NULL |
| NULL <=> NULL (安全等) | ✅ TRUE | ✅ TRUE | ❌ 不支持 | ❌ 不支持 |
| ORDER BY ... NULLS | 支持 FIRST/LAST | 默认最前 | 默认最前 | 默认最前 |
| NOT IN (含 NULL) | 返回空集 | 返回空集 | 返回空集 | 返回空集 |
| 聚合 SUM/AVG | 忽略 NULL | 忽略 NULL | 忽略 NULL | 忽略 NULL |
| COUNT(*) | 计入 NULL | 计入 NULL | 计入 NULL | 计入 NULL |
| DISTINCT NULL | 视为相同 | 视为相同 | 视为相同 | 视为相同 |
| CHECK (col > 0) on NULL | 接受 (UNKNOWN → TRUE) | 接受 | 接受 | 接受 |
NULL = NULL 永远是 UNKNOWN(而非 TRUE) —
WHERE col = NULL 永远过滤不出任何行。
正确写法是 IS NULL / IS NOT NULL。
NOT IN (subquery) 一旦子查询出现 NULL,整个外层会返回空集,
这是新人最常踩的坑([3] [4])。
腾讯云开发者社区 2024 年实测([5]):允许 NULL 的字段在 B-Tree
索引中需额外标记 NULL 位置,某用户表 phone 字段(允许 NULL)的索引大小
比非 NULL 设计增加 23%。WHERE col IS NULL 是否能命中
索引高度依赖优化器(IS NULL 在 MySQL 通常可用,
<= 100 范围查询会跳过 NULL)。
Codd 在 1979 年的论文中曾提出四值逻辑(A-marks / I-marks),
区分"未知"和"不适用",但所有现代 RDBMS 都合并为单值 NULL 用三值逻辑处理。
著名 SQL 教材《SQL 进阶教程》专门有一章讨论"两种 NULL",建议业务上尽量
用 NOT NULL 约束排除歧义。
由尼古拉·布鲁森佐夫(Nikolay Brusentsov)领导的团队,1958 年研制了 Setun(Сетунь),这是人类历史上首台也是唯一一台量产 的平衡三进制计算机,采用 -1 / 0 / +1 三态逻辑,基于铁氧体磁芯和半导体二极管。
核心障碍不是数学,而是生态。
| 维度 | Setun | IBM 7090(同期二进制) |
|---|---|---|
| 逻辑态密度(态/mm²) | 0.008(磁芯) | 0.15(分立晶体管) |
| 噪声容限(V) | ±0.35 | ±0.8(ECL) |
| 首年量产良率 | 63% | 79% |
| 指令集 | 5 种操作码,12 位 | 完整 ISA,可映射 ALGOL 60 |
| I/O 协议 | 磁鼓自定义串行 | 标准 ASCII 电传 |
| 编译器 | 无 TIR,FORTRAN 子集移植性能损失 67% | 成熟 FORTRAN 生态 |
1965 年 Intel 成立时,全球 92.3% 的光刻掩模已锚定二进制,摩尔定律的指数加速 让任何替代架构失去成本支撑。Setun 成为"可行但不可产业化"的经典案例。
| 指标 | 三进制方案 | 对比二进制 |
|---|---|---|
| 晶体管数量 | 减少 40% | 基线 |
| 动态功耗 | 1/3 | 1.0× |
| 单晶体管信息承载 | 1.585 bit | 1.0 bit |
| AI 训练速度(ResNet-50) | +47% | 基线 |
| 7nm 良率(实测) | ~78% | ~92% |
| 数据中心单机柜年省电 | 10 万度 | 0 |
部分中文媒体报道(尤其是自媒体)对华为三进制芯片存在明显夸大: "2nm 等效" "绕开 EUV 光刻机" "黄仁勋承认改写规则" 等说法均缺乏一手信源。 建议以国家知识产权局专利文本和 IT 之家 / 飞象网等一线科技媒体的原始报道为准。 截至 2026-06,昇腾 -T1 仍处于样品阶段,未规模量产。
TCAM(Ternary Content-Addressable Memory)在网络设备中已大规模商用 20+ 年,
是当前最成功的"三进制"硬件形态之一。每个存储单元支持 0 / 1 / X(Don't Care) 三态,
适合高速模糊匹配(路由表 / ACL / QoS)。
Key RAM 存储关键字 (例: 192.168.1.0)
Mask RAM 存储匹配掩码 (例: 255.255.255.0)
─────────────────────────────────────────────
匹配规则: (Key & Mask) == (Tuple & Mask)
→ Tuple = 192.168.1.42, Mask = 255.255.255.0
→ 匹配值 = 192.168.1.0 ✓
所有匹配在一个时钟周期内完成,这就是路由查找能做到纳秒级的核心原因。
arXiv 2502.05787([6])提出 TAP-CAM, 基于铁电 FeCAM 的可调近似匹配引擎,支持"匹配程度"控制(全匹配 / 部分匹配 / 模糊匹配) 三档可调,适用于 LLM 推理中的 KV-cache 检索场景。
TCAM 的"X 状态 = 任意匹配"本质上是 SQL LIKE '192.168.%' 的硬件等价物。如果 SKDB 未来要做 IP / 域名类字段的索引, TCAM 设计哲学("三态中 X 表示通配")是天然的参考模型。
大多数工程师不知道,LPDDR5 的 DQ/DQS 信号已经在用 PAM-3 编码。 这不是芯片的"三进制指令集",而是物理层波形上的三电平调制,目标是 在不提高时钟频率的前提下提升带宽。
| 编码 | 每符号 bit | 6400 MT/s 下的符号率 | SNR 提升 |
|---|---|---|---|
| NRZ(传统二进制) | 1.0 | 3.20 GHz | 基线 |
| PAM-3(三进制) | 1.585 | 2.13 GHz | +3.2 ~ 4.7 dB |
代价:接收端需要多阈值判决(V₁ / V₂)、CTLE + DFE 联合训练、 发送端 4-tap FIR 预加重 + 片上阻抗校准。PHY 设计复杂度显著上升, 但换来 58.5% 的带宽增益,对内存受限场景极具吸引力。
UCIe 联盟(由 Intel / AMD / ARM / Samsung / TSMC 等组成)在 2025 年发布的 UCIe 3.0 规范里,把 PAM-3 列为下一代芯片间互连的候选物理层, 数据速率从 32 GT/s 翻倍至 64 GT/s。配合 3D 封装,实现每毫米 5.27 Tb/s 边缘带宽 (ISSCC 2025 实测,0.29 pJ/bit 能效)。
量子比特(qubit)的叠加态 |0⟩ + |1⟩ 与三态分类有天然亲和力。
中科大联合华为 2025 年建成的全球首台三进制超导量子计算机原型,
在化学模拟中将苯分子计算时间从 8 小时压缩至 19 分钟。
具体研究方向:
上述成果多来自媒体报道与厂商白皮书,部分仍处于"原型验证"或"仿真"阶段, 距规模化量子计算 + 三进制经典接口的工业落地还有相当距离。引用时建议保留怀疑态度。
综合 2 ~ 7 节的脉络,数据库内核设计可以从三进制研究中拿到四个具体启发:
3VL 的复杂性主要来自 NULL。在 schema 设计上把 NOT NULL 设为默认, 只对真正需要表达"未知 / 不适用"的字段显式允许 NULL,可以从源头减少 90% 的 3VL 陷阱。 这与《SQL 进阶教程》的建议一致。
把 3VL 的中间态从"被动出现"变成"主动可用":
-- 经典 SQL:只能用 IS NULL
SELECT * FROM users WHERE email IS NULL;
-- 增强版:可以问"这一行是否处于 unknown 状态"
SELECT * FROM logs WHERE severity = 'UNKNOWN';
借鉴 TCAM 的 0 / 1 / X 思想,B-Tree 索引可以支持前缀通配查询 而不需要 LIKE '%xxx%'(后者是全表扫描)。
对于"软删除 / 草稿 / 审核中"这类业务状态,与其用 status VARCHAR 不如用
row_state ENUM('committed', 'pending', 'unknown')。
强制三个值,反而比开放字符串更安全。
本站 SKDB
(项目代号:SKDB,位于 /Users/davidliu/6P/skdb01)是一个
模仿 SQLite 的轻量级 JSON 文件数据库。基于本综述的研究,把"三进制思想"纳入 SKDB
路线图的具体计划如下:
| 版本 | 里程碑 | 与三进制的连接 |
|---|---|---|
| v0.1.5 | 引入 RowState 枚举字段 | 3VL 思想:committed / pending / unknown |
| v0.2.0 | 类型强校验 + ALTER TABLE | 为 ternary 类型(TRIT)铺路 |
| v0.3.0 | 单列索引 + 通配查询 | 借鉴 TCAM 0/1/X 三态 |
| v0.4.0 | WAL 事务 + flock | 硬件层三进制无关,但 LSN 可用 TRIT 表示 |
| v0.5.0 | 最小 SQL 子集解析 | 支持 IS UNKNOWN 谓词 |
| v1.0.0 | PyPI 发布 + benchmark | 可选 TERNARY 模式(纯 3VL 语义) |
完整 SKDB v0.1.0 开发说明书见
SKDB 开发说明书
(镜像于 /Users/davidliu/6P/skdb01/docs/development-doc-zh.html)。