Kdb 表的枚举

Kdb 表的枚举,kdb,k,Kdb,K,我找不到有关enum在上的表域上是什么的信息。但那里存在一些有趣的东西:。我尝试了这些示例,发现了一个enum结构,它在某些情况下的行为类似于正常的enum,但在其他情况下有一种奇怪的行为 q)kt:1!t:([]a:`a`b`c;b:10 20 30) q)tt:([]k:`a`a`a`b;d:11 21 31 41) q)show et1:`t!t[`a]?tt[`k] `t!0 0 0 1 q)show et2:`kt$tt[`k] `kt$`a`a`a`b q)meta select k

我找不到有关
enum
在上的表域上是什么的信息。但那里存在一些有趣的东西:。我尝试了这些示例,发现了一个
enum
结构,它在某些情况下的行为类似于正常的enum,但在其他情况下有一种奇怪的行为

q)kt:1!t:([]a:`a`b`c;b:10 20 30)
q)tt:([]k:`a`a`a`b;d:11 21 31 41)
q)show et1:`t!t[`a]?tt[`k]
`t!0 0 0 1
q)show et2:`kt$tt[`k]
`kt$`a`a`a`b
q)meta select k,d,et1,et2 from tt
c  | t f  a
---| ------
k  | s     
d  | j     
et1| j t   
et2| s kt  
q)select r1.a, r1.b, r2.a, r2.b from update r1:et1, r2:et2 from tt
a b  a1 b1
----------
a 10 a  10
a 10 a  10
a 10 a  10
b 20 b  20
从这个角度来看,
et1
et2
都有相似的行为。但如果我们检查其他
enum
属性,我们会看到不同之处:

q)et2[0]
`kt$`a
q)et2[0]:`a
q)
q)et1[0]
`t!0
q)et1[0]:0 / neither works this
't
  [0]  et1[0]:0
             ^
q)et1[0]:(`a`b!(`a;10)) / nor that
't
  [0]  et1[0]:(`a`b!(`a;10))
             ^
如果我们只为一个键控表构建枚举,情况似乎更奇怪:请参见一个键列表和两个键列表的区别:

q)kkt:2!t:([]a:`a`b`c;b:10 20 30;c:11 22 33)
q)kt:1!0!kkt
q)show ekkt:`kkt$((`a;10);(`b;20);(`b;20))
`kkt!0 1 1
q)show ekt:`kt$(`a`b`b)
`kt$`a`b`b
对于
kkt
,使用相同的硬编码(带有
)枚举表示法


所以问题是:它们是什么使用熟悉的
$
和硬编码
的枚举表格的符号?是否可以为他们应用
enum extend
技术(
),以及如何应用?有关于它们的文档吗?

你看到的是a和a之间的区别。如文件中所述,差异包括:

  • 外键专门设计用于链接到键控表的键
  • 如果“未知键”不是键控表中的键之一,则外键不允许链接
  • 链接列可以链接到任何任意列(如果在另一个表中甚至没有出现值-因此它不能保证引用完整性)
  • 链接列通常用于磁盘上的表
后者不允许使用简单的外键


另外,我不知道为什么要修改/编辑枚举的值-不要这样做

Terry,谢谢你为
提供了不存在的密钥。我认为
(!?)
组合可以与
$
互换,但速度较慢。现在我看到这是两种完全不同的情况。我尝试修改枚举的值只是为了使用示例-我保证,我不会在任何地方使用它
q)kt:([eid:1001 1002 1003] name:`Dent`Beeblebrox`Prefect; iq:98 42 126)
q)tdetails2:([] eid:1003 1001 1002 1001 1002 1001 777;sc:126 36 92 39 98 42 7)
q)update linker:`kt!((0!kt)`eid)?eid from `tdetails2
`tdetails2
q)select linker.name from tdetails2
name
----------
Prefect
Dent
Beeblebrox
Dent
Beeblebrox
Dent