{'fraction_non_alphanumeric': 0.021686746987951807, 'fraction_numerical': 0.0024096385542168677, 'mean_word_length': 5.021739130434782, 'pattern_counts': {'":': 0, '<': 0, '<?xml version=': 0, '>': 0, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
Finding candidate keys for relational data bases

The candidate keys, as defined by E. F. Codd [4], are important in the process of reducing a normalized relation into second and third normal forms.Given a set of functional relations, Delobel and Casey [6] transformed this set into a Boolean function and it was shown that the set of all prime implicants of this function that have no primed variables are the only candidate keys.Starting only with the functional relations (dependencies), a new approach is proposed for finding all the candidate keys of a normalized relation without using a Boolean function. The algorithm depends on an implication matrix, its transitive closure and a systematic method for introducing attributes to form keys.This algorithm is suitable for hand computation as well as computer implementation.