The Ancestry_ICW table stores In-Common-With (ICW) data — the “shared matches” relationships between people in your match list. Each row records that two matches share DNA with each other, along with how much. This is the raw material behind clustering tools: if many of your matches are all in common with one another, they likely descend from the same branch of your tree.
Each row is a directional pair: matchid and icwid are two test GUIDs that appear as shared matches, and the DNA columns describe the amount of DNA those two people share with each other. Both GUIDs join back to Ancestry_matchGroups.matchGuid.
| Column | Type | Source | Description |
|---|---|---|---|
| Id | int (PK) | Auto | Auto-incrementing primary key |
| matchid | string | Shared Matches | First match GUID in the pair. Joins to Ancestry_matchGroups.matchGuid. Stored uppercased. |
| icwid | string | Shared Matches | Second match GUID — the person who is in common with matchid. Joins to Ancestry_matchGroups.matchGuid. Stored uppercased. |
| sharedCentimorgans | decimal | Shared Matches | Shared cM between the two people in the pair. Nullable — present only when A* returns match-in-common detail. |
| confidence | decimal | Shared Matches | A*’s confidence value for the shared relationship. Nullable. |
| numSharedSegments | int | Shared Matches | Number of DNA segments the two people share. Nullable. |
| meiosis | int | Shared Matches | Meiosis count (genetic distance) for the shared relationship. Nullable. |
| created_date | string | App | Date the ICW row was written (yyyy-MM-dd) |
sharedCentimorgans, confidence, numSharedSegments, meiosis) are all nullable and travel together. A* only supplies them when it returns match-in-common detail for the pair; otherwise the row records the in-common relationship alone, with these columns left null.When ICW gathering is enabled, the browser visits each match’s shared-matches page. For every other match listed on that page, the application records the in-common relationship in both directions:
matchid and the shared match as icwid.matchid and icwid reversed).Both rows carry the same DNA values when match-in-common detail is available. Storing both directions lets queries find shared matches from either side of the relationship without a self-join. GUIDs are normalized to uppercase (and stray quotes stripped from matchid) before insertion. Rows are collected in memory and written in a single bulk transaction per shared-matches page rather than one query at a time.
matchid, icwid) and (icwid, matchid). A later gather updates the existing row for a pair rather than duplicating it.Re-gathering never overwrites good ICW detail with blanks. The DNA columns are treated as a unit when deciding whether to write:
meiosis, confidence, sharedCentimorgans, or numSharedSegments, it is inserted or replaced. An existing row for the same pair has those four values refreshed; this is safe because the new row carries real data.In short: a row that knows the cM, confidence, segments, and meiosis can update what is stored, but a bare in-common pair will never erase richer data already on record.
matchid and icwid join to its matchGuid; the match’s name, shared cM with you, and notes live there.