A database compression system comprising: an analyzer configured to analyze a schema of a database by maintaining a list of attributes and corresponding values and to analyze a selection of entries in the database; a counting engine configured to determine a frequency of occurrence of each attribute/value pair in the selection of entries; and a mapping engine configured to maintain a list of available condensed codes and to assign a condensed code to a character string; wherein the database compression system is arranged to: generate a data structure comprising a plurality of levels, each level representing a different one of the attributes, wherein a highest level in the data structure comprises a node representing an attribute/value pair having a highest frequency of occurrence in the selection of entries in the database; and each subsequent level in the data structure comprises a node representing an attribute/value pair having a frequency of occurrence in the selection of entries in the database that is the same as, or the next highest to, the highest frequency of occurrence in the selection of entries in the database of an attribute/value pair in the level above; characterised in that the database compression system is arranged to: determine a combination of attribute/value pairs that spans all of the levels of the data structure and which, of the combinations of attribute/value pairs that span all levels of the data structure, has the highest frequency of occurrence in the selection of entries in the database; and assign a said condensed code to a said character string that comprises the determined combination of attribute/value pairs, wherein the condensed code is a code having a shortest length of the codes in the list of available condensed codes. an analyzer configured to analyze a schema of a database by maintaining a list of attributes and corresponding values and to analyze a selection of entries in the database; a counting engine configured to determine a frequency of occurrence of each attribute/value pair in the selection of entries; and a mapping engine configured to maintain a list of available condensed codes and to assign a condensed code to a character string; wherein the database compression system is arranged to: generate a data structure comprising a plurality of levels, each level representing a different one of the attributes, wherein a highest level in the data structure comprises a node representing an attribute/value pair having a highest frequency of occurrence in the selection of entries in the database; and each subsequent level in the data structure comprises a node representing an attribute/value pair having a frequency of occurrence in the selection of entries in the database that is the same as, or the next highest to, the highest frequency of occurrence in the selection of entries in the database of an attribute/value pair in the level above; characterised in that the database compression system is arranged to: determine a combination of attribute/value pairs that spans all of the levels of the data structure and which, of the combinations of attribute/value pairs that span all levels of the data structure, has the highest frequency of occurrence in the selection of entries in the database; and assign a said condensed code to a said character string that comprises the determined combination of attribute/value pairs, wherein the condensed code is a code having a shortest length of the codes in the list of available condensed codes. generate a data structure comprising a plurality of levels, each level representing a different one of the attributes, wherein a highest level in the data structure comprises a node representing an attribute/value pair having a highest frequency of occurrence in the selection of entries in the database; and each subsequent level in the data structure comprises a node representing an attribute/value pair having a frequency of occurrence in the selection of entries in the database that is the same as, or the next highest to, the highest frequency of occurrence in the selection of entries in the database of an attribute/value pair in the level above; characterised in that the database compression system is arranged to: determine a combination of attribute/value pairs that spans all of the levels of the data structure and which, of the combinations of attribute/value pairs that span all levels of the data structure, has the highest frequency of occurrence in the selection of entries in the database; and assign a said condensed code to a said character string that comprises the determined combination of attribute/value pairs, wherein the condensed code is a code having a shortest length of the codes in the list of available condensed codes. determine a combination of attribute/value pairs that spans all of the levels of the data structure and which, of the combinations of attribute/value pairs that span all levels of the data structure, has the highest frequency of occurrence in the selection of entries in the database; and assign a said condensed code to a said character string that comprises the determined combination of attribute/value pairs, wherein the condensed code is a code having a shortest length of the codes in the list of available condensed codes.