当文件的记录中含多个关键码时,经常需要对记录的"次码"(或辅键,指记录的某些重要属性)或"多码(多辅键)的组合"进行检索时,文件的组织方式应该同时考虑如何便于进行次码或多码组合的查询,称这类文件为"多关键码文件"。如右侧所示为多关键码文件一例,其中"考号"为"主码","总分"和"数学"成绩为次码。假设该文件为索引顺序文件,则当需按"总分"进行检索时,只能依次存取各个记录比较它们的"总分"是否满足条件直至找到相应记录。为此应该为这类文件在主文件之外另建立"次码索引",例如右侧是为"总分"建立的次码索引表。可见次码索引的特点是,对应每个次码值的记录可能有多个,因此每个"次码索引项"应该包含一个次码值和一个线性表,线性表中的记录含有相同的次码值。对线性表的不同组织方法得到两种不同的多关键码文件:"倒排文件"和"多重表文件"。

 ・倒排文件
  在倒排文件中,为每个需要进行检索的次码建立一个"倒排表",倒排表中具有相同次码的记录构成一个顺序表。当按次码进行检索时,首先从相应的次码倒排表中得到记录的主码信息,然后从主索引存取相应记录。这种倒排表的优点是对于主文件的存储具有相对的独立性,无论主文件中记录的存储位置如何变化都不需要修改次码索引,对于多码组合查询,也可以先对由每个次码得到的多个主码集合进行集合运算,最后只要对得到的满足多码检索要求的主码进行存取。但如果主文件为散列文件,对文件进行的操作不改变记录的存储位置,则在次码倒排表中也可以不是记录的主码,而是记录所在的"页块地址",其优点是可以根据倒排表直接存取记录,而不需要再按主码进行检索。

 ・多重表文件
  多重表文件的特点是,主文件为"串联文件"(即按主码顺序利用指针链接为表结构),并建立主码的非稠密索引-主索引,对每一个次码建立次索引,所有具有同一次码值的记录链接为一个链表,链表的头指针和链表的长度以及次码值构成一个索引项。多重表易于构造和插入记录,但删除记录时要修改所有次索引链表。在进行多码组合查询时,应选择长度最短的次索引,依次存取记录直至找到满足所有条件的记录为止。
  多关键码文件中的次索引本身可以是顺序表(如上述的总分次索引),也可以是树表或哈希表。
 


姓名
考号
总分
政治
数学
英语
王铭
1801
259
98
66
95
刘青
1802
188
68
73
47
张铭
1803
254
90
78
86
蔡勇
1804
240
75
85
80
章林
1805
240
54
96
90

次码值
相应记录的主码
≥270
 1866,… …
≥260
 1845,… …
≥250
 1801,1803,… …
≥240
 1804,1805,… …
 … …