I realized something while walking back from the bathroom in the middle of the night. A surprising number of solutions come to me like that. Anyway, there's a problem with the design as described earlier. If you have multiple Lexeme tables, the senses and derivatives tables have foreign keys from different tables in the same column. That's bad. The easiest way to fix this is to have a single Lexeme table and add a row indicating to which language the lexeme belongs. That way the primary keys for each lexeme are unique across languages.