Okay, so, this will be quite a bit, sorry. I'm working on several constructed languages for a worldbuilding project. Up until this point, I have been using a spreadsheet to store the vocab; each row was an entry, each column represented a different aspect of that (spelling, pronunciation, internal structure, etymology, part of speech, meanings, descendants, derivatives), and each subsheet was for a different language.
However, this quickly got unwieldy because I had to manually keep track of every connection between entries. So now, I am trying to find a way to store the vocabulary of my conlangs and both their synchronic (what affixes/root words is the word made of; how can the word be derived to form new words) and diachronic (what word did these come from in a predecessor language; were they loaned from a different language; what words did they produce in daughter languages) relationships among each other--keep in mind that I'm not only storing words, but also affixes and phrases, but for all purposes, they can be considered as "entries" regardless.
Alongside the actual data storage, I also want an interface (GUI or text, I can figure that out later :D) to easily display and update the vocabulary. I also want to implement a way to search the dictionary through the use of tags, searching for the meaning, and/or searching for the actual form they take.
Anyways, here's an example of an entry (anything italicized is an entry, anything bolded is supposed to be a hyperlink either to an entry or to a tag):
tekar /te.kar/
(Classical Hendaric, noun)
Meaning
cow's milk
Notes
Irregular declension pattern of accusative case
Synchronic
Composition: √tek (Classical Hendaric) + -ar (Classical Hendaric)
Derivations: tekarul (Classical Hendaric), bitekar (Classical Hendaric)
Diachronic
Etymology: tikkar (directly from Old Hendaric)
Descendants: tegar (loaned into Western Kimuic), sahr (directly into Aboan), thiqa (directly into Remeic)
As you can see; each of the italicized entries has their own version of the above section. The way I think I would represent them is as follows:
- Synchronic: directed acyclic graph going from components of the word to the derived words, though the component(s) can be the word itself or from a different language
- Diachronic: tree graph where the parent node is the term in the origin language and the daughter node is the destination language's term. The edge also carries if the term was loaned, directly inherited, or calqued (loan-translation: think "seize the day" for "carpe diem")
Each synchronic graph forms a certain language (the set of all of the entries in that language). Language sets are also organized in a tree/forest; the genetic parent language (think Latin -> French) and child languages are where you think. The set of related sets is considered a language family, and it has a proto-language at its root
Other sets also exist as "tags", an entry can be tagged with part of speech or whether it is an affix or not. These tags form sets of entries within each language set.
Anyway, what structure would one use to describe the synchronic graph and diachronic tree operating in parallel? How would someone go about implementing one and how to make it useful/easy to use for searching, reading, and adding?