簡體   English   中英

表的枚舉

[英]Enums for tables

我沒有找到有關enumhttps://code.kx.com/q/ref/enumerate/的表域上的信息。 但是那里存在一些有趣的東西: https://code.kx.com/q/kb/linking-columns 我嘗試了這些示例,發現一個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

從這個角度來看, et1et2都有相似的行為。 但是,如果我們檢查其他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技術( ? )以及如何? 他們有任何文件嗎?

您看到的是簡單外鍵鏈接列之間的區別。 如文檔中所述,差異包括:

  • 外鍵專門設計用於鏈接到鍵控表的鍵。
  • 如果“未知鍵”不是鍵控表中的鍵之一,則外鍵不允許鏈接
  • 鏈接的列可以鏈接到任意列(即使一個值沒有出現在另一個表中 - 因此它不能保證引用完整性)
  • 鏈接列通常用於磁盤表
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

對於簡單的外鍵,后者是不允許的。

另外我不知道你為什么要修改/編輯枚舉的值——不要那樣做!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM