The AncestryAncestorCouple table records the common-ancestor couples that A* identifies between you and a match — the “potential ancestors” or shared most-recent common ancestors surfaced on a match’s compare page. Each row is one couple (a father and a mother) shared between one of your kits and one match, with the details of each partner flattened into the same row.
Rows are keyed by the pair (TestGuid, MatchGuid), so there is one couple row per you/match pairing.
| Column | Type | Source | Description |
|---|---|---|---|
| Id | int (PK) | Auto | Auto-incrementing primary key |
| TestGuid | string | Compare | Your test kit GUID. Stored uppercased. |
| MatchGuid | string | Compare | The matched person’s GUID. Stored uppercased. |
| Column | Type | Source | Description |
|---|---|---|---|
| FatherAmtGid | string | Compare | A* match-tree global ID for the father |
| FatherBigTreeGid | string | Compare | A* big-tree global ID for the father |
| FatherKinshipPathToSampleId | string | Compare | Kinship path connecting the father to your sample (kit) |
| FatherKinshipPathFromSampleToMatch | string | Compare | Kinship path from your sample through the father to the match |
| FatherPotential | bool | Compare | True if the father is a potential (not confirmed) common ancestor |
| FatherInMatchTree | bool | Compare | True if the father appears in the match’s own tree |
| FatherInBestContributorTree | bool | Compare | True if the father appears in the best contributor tree A* used |
| FatherDisplayName | string | Compare | Father’s display name |
| FatherBirthYear | string | Compare | Father’s birth year |
| FatherDeathYear | string | Compare | Father’s death year |
| FatherIsMale | bool | Compare | True when a father person is present in the couple |
| FatherNotFound | bool | Compare | True if the father person could not be found |
| FatherVeiled | bool | Compare | True if the father’s details are veiled/hidden by privacy |
| FatherRelationshipToSampleId | string | Compare | Relationship label of the father to your sample |
| FatherRelationshipFromSampleToMatch | string | Compare | Relationship label along the path from your sample to the match via the father |
| Column | Type | Source | Description |
|---|---|---|---|
| MotherAmtGid | string | Compare | A* match-tree global ID for the mother |
| MotherBigTreeGid | string | Compare | A* big-tree global ID for the mother |
| MotherKinshipPathToSampleId | string | Compare | Kinship path connecting the mother to your sample (kit) |
| MotherKinshipPathFromSampleToMatch | string | Compare | Kinship path from your sample through the mother to the match |
| MotherPotential | bool | Compare | True if the mother is a potential (not confirmed) common ancestor |
| MotherInMatchTree | bool | Compare | True if the mother appears in the match’s own tree |
| MotherInBestContributorTree | bool | Compare | True if the mother appears in the best contributor tree A* used |
| MotherDisplayName | string | Compare | Mother’s display name |
| MotherBirthYear | string | Compare | Mother’s birth year |
| MotherDeathYear | string | Compare | Mother’s death year |
| MotherIsFemale | bool | Compare | True when a mother person is present in the couple |
| MotherNotFound | bool | Compare | True if the mother person could not be found |
| MotherVeiled | bool | Compare | True if the mother’s details are veiled/hidden by privacy |
| MotherRelationshipToSampleId | string | Compare | Relationship label of the mother to your sample |
| MotherRelationshipFromSampleToMatch | string | Compare | Relationship label along the path from your sample to the match via the mother |
*NotFound or *Veiled flag is set and the name/year fields are blank.Rows are written during a per-match Compare visit. When the compare response carries an ancestorCouples list, the app flattens each couple — pulling the father and mother sub-objects into the single-row layout above — and saves it against the current TestGuid and MatchGuid. If a match has no shared ancestor couples, no row is written. Because this happens on compare pages, the table is only populated when tree gathering (or a gather that visits compare pages) is enabled.
Saving is an upsert keyed on (TestGuid, MatchGuid): the app looks for an existing row for that pairing and updates it in place if found, otherwise inserts a new one. A unique index on (TestGuid, MatchGuid) enforces one couple row per you/match pairing, so re-gathering refreshes the existing row rather than duplicating it.
MatchGuid.