A Three-Tiered Genealogy Database Application

"There are many fair places in heaven, and over everything there a godlike watch is kept. A hall stands there, fair, under the ash by the well, and out of that hall come three maids, who are called thus: Urdr, Verdandi, Skuld; these maids determine the period of men's lives: we call them Norns; but there are many norns: those who come to each child that is born, to appoint his life; these are of the race of the gods, but the second are of the Elf-people, and the third are of the kindred of the dwarves, as it is said here:

Most sundered in birth | I say the Norns are;
     They claim no common kin:
 Some are of Ęsir-kin, | some are of Elf-kind,
     Some are Dvalinn's daughters."

From the part of the Edda cycle called Gylfaginning, Ch. 15. Compiled / written by Snorri Sturlason abt. 1200 AD, translated by Arthur Gilchrist Brodeur 1916.


This is a very preliminary page, giving just the barest outline of the project. More will follow as I'm sorting things out.

Project "Urdabrunn" is a three-tiered database application for serious genealogy research, mainly using PostgreSQL and PHP. The software, at least at the client side, should be pretty platform independent, with UNIX-like systems as the primary target.

The name "Urdabrunn" is selected because it was the dwelling place of the three major Norns of Norse Mythology: Urd, Skuld, and Verdandi, roughly paraphrased in English as Past, Present, and Future. The three layers or subsystems of the Urdabrunn framework are named after the three Norns:

  1. Urd - the database.
  2. Skuld - the application logic and middleware layer.
  3. Verdandi - the user interface.

My reason for initiating this project is primarily the perceived lack of satisfying genealogy software on the Linux platform; most of the "good" programs are written for Windows only. Furthermore, I believe that there exists a need for multi-tiered applications in this field. If the main database and heavy program logic can be placed on servers, it's feasible to run very thin clients on eg. handheld devices that communicate with the database via the "middleware" layer over the Internet. It should also open the possibility of collaborative projects in genealogy, something that has been felt as a need by many (including myself) for a long time.

The data model will initially be close to that of "The Master Genealogist" (TMG). This is a very flexible schema of which I have an intimate knowledge, due both to many years of daily use, and developing my own presentation software suite "Slekta(SQL)" (Norwegian only), which extracts data directly from the TMG FoxPro database and converts them to SQL command files with a Perl script, and presents the data on the Web using MySQL and PHP.

As already mentioned, the model owes much to TMG, but also to the Gentech GDM. I would rather implement a "pure" GDM schema, but in order to preserve legacy data, I feel that must come incrementally, in an evolutionary way.

The model should not rely overly much on "GEDCOM compliance", as so many Open Source genealogy applications tend to do. It must of course be possible to import and export data in the GEDCOM format, but the internal database structures should not be implemented with the GEDCOM specification in mind. In particular, I want to eventually get rid of the "One person - one ID number" paradigm that in my opinion is the curse of current genealogy software with regards to doing serious research, forcing us into premature conclusions about identity.

The first project milestone was to import my own TMG database into Urd. You can read about that in the article Exodus. Further details about my thoughts and work on the subject to date can be found at my Web site in the articles at "Forays Into Genealogy Data Base Modeling". I'm also maintaining a blog called "Me And My Database" about the project.

Here is an image of the initial data model. The image isn't quite fair to the model, mainly because of what I choose to call a "misfeature" in DbDesigner: Foreign keys are propagated from one table to the next one, in a cascading fashion. For instance, the "names_person_id" FK found in the "name_parts" table is an artifact; table "names" has a reference to "person_id" in the "person" table, but the reference should really stop there. If anybody can direct me to a freeware ER-design program that supports PostgreSQL, or explain how to get rid of the "cascading foreign keys" in DbDesigner, I'll be much obliged.

If anyone finds the project interesting and wants to participate, please don't hesitate to contact me. In particular, I want help from people with experience in user interface and network programming. The preferred programming language for this project is currently PHP, but as one of the main goals is modularity or "pluggability", any old PL will probably do.

Leif Biberg Kristensen

To the Urdabrunn Project Summary page

SourceForge.net Logo