HelpDatabase Reference › DGIndividual

DGIndividual Table

The DGIndividual table holds the people inside DNAGedcom’s unified, service-independent family trees. Each row is one person in one tree. A tree therefore produces many rows, all linked back to their parent DGTree row through the treeid column.

Whether a person originally came from a GEDCOM file you uploaded, an FTDNA or MyHeritage match tree, or a WikiTree branch, that person is flattened into the same column shape here. This is what lets the People view and the Common Ancestor tools line up individuals across trees from different services.

Link to the tree: DGIndividual.treeid is an integer that holds the parent DGTree.Id — not the service’s own tree key. The relationship between people is expressed through personId, fatherId, motherId, and spouseId, which reference other individuals’ personId values within the same tree.

Column Reference

Identifiers & Links

ColumnTypeDescription
Idint (PK)Auto-incrementing primary key.
treeidintThe parent tree. Holds the DGTree.Id of the tree this person belongs to.
matchidstringThe encrypted kit/match id of the match this tree was gathered from, when applicable.
personIdstringThe person’s identifier within the tree. Referenced by other rows’ fatherId, motherId, and spouseId.
fatherIdstringpersonId of this person’s father within the same tree.
motherIdstringpersonId of this person’s mother within the same tree.
spouseIdstringpersonId of this person’s spouse. Not populated by the gather paths; present for trees that supply it.
relidstringAhnentafel relationship number relative to the tree root (root = 1, a person’s father = 2×relid, mother = 2×relid+1). See the note below — it is generally empty on DGIndividual rows.
sourcestringWhich pipeline produced the person — the same value carried on the parent DGTree (e.g. “gedcom”, “FTDNA”, “WikiTree”, “MyHeritage”).

Person

ColumnTypeDescription
surnamestringLast (family) name.
givenstringGiven (first) name.
sexstringGender, normalized to “M”, “F”, or “U” (unknown).

Birth & Death

ColumnTypeDescription
birthdatestringBirth date as recorded in the source tree (free text, e.g. a year or a full date).
birthplacestringBirth place as recorded in the source tree.
deathdatestringDeath date as recorded in the source tree.
deathplacestringDeath place as recorded in the source tree.
birthdt1DateTimeParsed birth date (lower bound of a date range). Derived from birthdate where a date could be parsed. Often left at the default DateTime value (0001-01-01) when no date was parsed.
birthdt2DateTimeIntended upper bound of a parsed birth-date range. Legacy/unused — never assigned, so it stays at the default DateTime value.
deathdt1DateTimeParsed death date (lower bound of a date range). Derived from deathdate where a date could be parsed. Often left at the default DateTime value.
deathdt2DateTimeIntended upper bound of a parsed death-date range. Legacy/unused — never assigned, so it stays at the default DateTime value.

Tracking

ColumnTypeDescription
created_datestringWhen the row was created, stored as a yyyy-MM-dd string.
About relid: The ahnentafel scheme (root = 1, father = 2×relid, mother = 2×relid+1) is real, but in practice the gather and GEDCOM-upload paths do not assign relid on DGIndividual rows, so the column is generally empty here. The same ahnentafel numbering is populated on the A* tree table (Ancestry_matchTrees.relid) and in the CSV export pipeline; DNAGedcom’s tree-comparison code reads the value when one is present.

How It’s Populated

Rows are inserted alongside their parent DGTree row whenever a tree is brought into DNAGedcom. Each producer reads its own upstream format and writes the same flattened person shape:

  • GEDCOM upload — the uploaded file is parsed into individuals; personId, given, surname, birthdate/birthplace, deathdate/deathplace, and sex are taken from the file, and fatherId/motherId are resolved from the GEDCOM family links. treeid, source (“gedcom”), and created_date are then stamped on.
  • FTDNA, WikiTree, MyHeritage — gathered match trees set source to the service name, treeid to the parent DGTree.Id, matchid to the match’s encrypted kit, names and birth/death fields from the service’s tree data, sex normalized to M/F/U, and created_date to the current date. fatherId and motherId are filled in from the tree’s family/relationship block after the people are created.
De-duplication: Before inserting, the app checks for an existing individual with the same source and personId, so the same person is not stored twice within a source.

Related Tables

  • DGTree — the tree each person belongs to. DGIndividual.treeid holds the parent DGTree.Id.
  • Kit_TreeAssignment — assigns a tree to a DNA kit by DGTree.Id, which in turn determines which DGIndividual rows describe that kit’s tree.
  • Match_TreeOverride — points a single match at a better tree (by DGTree.Id), selecting a different set of DGIndividual rows for that match.
  • Computed_CommonAncestors — the common-ancestor computation walks DGIndividual rows (via personId/fatherId/motherId) to find ancestors shared between kits.