在Kdb+中能否将外键和链接列视为带特殊类型的普通列?
假设合理性分析
这个假设是合理的,具体分析如下:
关于外键的假设
kdb+里的外键(比如示例中fkt表的s1:ff$()`)本质就是带值域约束的普通列:
- 外键列的底层存储类型和被引用表的主键列完全一致,比如示例里
ff的主键是sym类型,fkt.s1的基础类型也是sym; - 它的核心约束就是值域被限制为被引用表主键列已存在的值,插入不符合的值会报错,除此之外和同类型的普通列用法高度重叠;
- 定义时用
被引用表名$这种运算符,确实是在声明列的特殊类型,符合“列名声明后的符号/运算符定义列类型”的前提。
关于链接列的假设
链接列(示例中t2的t1link:t1!t1.c1?c3`)也符合“带关联标记的普通列”的描述:
- 链接列的底层是普通的数值向量(
t1.c1?c3得到的是目标表主键列的匹配索引,属于long类型); t1!这个标记的作用就是给这个普通数值向量加上关联目标表t1的元数据,让它成为链接列,查询时可以直接通过链接关联到目标表的行;- 这种定义方式也是通过
!运算符来声明列的特殊类型,同样符合前提。
内容的提问来源于stack exchange,提问作者Xavier Z
相关产品推荐
相关产品推荐

