The finished character database looks like a collection of pages. The difficult work happened before those pages existed: deciding what deserves its own record, which facts can change, where uncertainty is allowed, and what the team must be able to retrieve in under thirty seconds.
The most reliable systems are not the ones with the most fields. They are the ones whose fields reflect how the project actually makes decisions. Use this checklist as a design review. Each item exists because a specific failure appears when it is ignored.
1. Give each character a stable internal identity
Checklist: unique internal ID, canonical display name, aliases, language variants if needed.
Why it exists: names change. A prince gains a title, an undercover agent uses three names, a localization team transliterates the same name differently, or a late reveal changes the public identity. If links depend only on visible names, renaming becomes dangerous.
The database should know that these labels refer to one entity. The internal ID stays boring and stable while presentation changes. Bad practice is Shadow-General-Lena-final. Better practice is CHAR-0187, with “Lena,” “General Lena,” and the secret alias stored separately.
2. Separate stable traits from time-based states
Checklist: mark each property as stable, time-bound, derived, or editorial note.
Why it exists: status fields quietly destroy history. If “Faction” changes from Red Court to Exile Network and you overwrite the cell, you may no longer know what was true in chapter 12.
A strong system records membership as something with dates or chapter ranges. The character page can display the current state, but historical records remain available. If you are using a relational database tool, this is where linked records become more useful than adding “Faction 1 / Faction 2 / Faction 3” columns.
3. Model important relationships as records
Checklist: relationship type, direction, effective period, visibility, evidence source.
Why it exists: relationships are rarely just labels. Brother, rival, commander, and debtor may all change, overlap, or be disputed.
Notion relations can connect records and expose the relation from both databases; Airtable linked records likewise create explicit connections and reciprocal fields. The product feature is not the design. The design decision is whether the relationship needs its own data.
If the only thing you need is “A knows B,” a simple link is enough. If you need “A publicly obeys B but secretly protects C after chapter 44,” the relationship needs its own structure.
4. Store evidence, not just conclusions
Checklist: source type, source location, version, confidence or canon status.
Why it exists: continuity arguments are often not about the fact itself. They are about where the fact came from.
A note saying “right knee injured” is weaker than a record with the fact, source volume/chapter, canon status, effective period, and last reviewed version. This turns “I remember it this way” into a resolvable question.
5. Do not make one field answer two questions
Checklist: every field has one semantic job.
Why it exists: ambiguous fields create contradictory values. “Role” might mean narrative archetype, occupation, team responsibility, or current faction position. Different collaborators fill it differently.
Split it into Story role, Occupation, Rank/title, and Production role if relevant. The small cost of extra clarity is lower than the cost of cleaning mixed data later.
6. Use relations before copying data
Checklist: when the same fact appears in multiple records, identify the owning source.
Why it exists: duplicated facts drift. If a faction’s official name appears on 40 character records, a rename requires 40 edits. If characters link to a faction record, the canonical name can live in one place.
Airtable lookups can display values from linked records; Notion rollups can aggregate related data. These are useful precisely because they reduce the need to copy the same fact everywhere.
But avoid the opposite extreme: do not hide basic readability behind ten layers of relations. A character page should still show the important answer even if that answer is derived.
7. Design for contradictions, not just clean data
Checklist: contradiction flag, competing claim, adjudication status, reviewer.
Why it exists: creative projects contain legitimate conflicts. Two drafts may disagree. A character may lie. An in-world document may be wrong. An adaptation may intentionally diverge from the novel.
If the database permits only one truth field, editors may erase useful uncertainty to make the table look clean.
Use explicit states such as confirmed canon, working draft, disputed in-world, superseded, adaptation-only, and author decision pending. The database should help resolve uncertainty, not pretend uncertainty does not exist.
8. Build views for jobs, not for admiration
Checklist: writer view, continuity view, art view, localization view, licensing or brand view as needed.
Why it exists: one giant master table forces every person to process irrelevant information.
A writer may need motivation, active relationships, current location, and unresolved promises. An artist may need approved appearance, costume version, height, color references, and scars. A licensing team may need approved names, marks, usage restrictions, and asset links.
The source data can be shared while the views are different. This is one of the strongest reasons to use a database at all: the same underlying records can support multiple operational questions.
9. Define what current means
Checklist: timeline point, publication version, canon branch.
Why it exists: “current outfit” is meaningless if the database contains a prequel, main trilogy, game adaptation, and post-story epilogue.
Current relative to what? Add context. A status can be current in main novel Volume 6, game version 2.3, post-epilogue timeline, promotional-art canon, or an adaptation continuity. Without this, a perfectly accurate value can still be wrong for the task.
10. Keep maintenance cheaper than memory
Checklist: owner, review trigger, stale-data rule.
Why it exists: any database can become a graveyard.
Do not schedule reviews for every property at the same frequency. Review high-risk facts when a manuscript milestone closes, when a new adaptation begins, or when an asset is exported. Allow low-risk trivia to remain untouched unless it becomes relevant.
A database should reduce the mental load on creators. If maintaining it consumes more attention than the continuity problems it prevents, simplify.
A copyable launch checklist
Before calling a character database ready, verify:
- Every character has a stable internal ID.
- Aliases do not create duplicate people.
- Time-changing facts are not silently overwritten.
- High-value relationships are modeled explicitly.
- High-risk facts have evidence.
- Draft, canon, disputed, and superseded states are distinguishable.
- Repeated data has one owning source where practical.
- Views exist for the jobs people actually perform.
- “Current” is tied to a timeline or version context.
- A named person or rule owns maintenance.
- The system can export a human-readable character brief.
- A collaborator can answer a continuity question without reading every note.
The hidden skill in database design is restraint. A good system does not try to represent the whole character. It represents the parts of the character that must remain consistent, searchable, auditable, and usable by other people. Prose can keep the nuance. The database keeps the promises.
One final stress test is to hand the database to a collaborator who did not design it and give them three real questions. If they cannot find the answer, the issue is usually naming, view design, source visibility, or over-nesting. Fix the path before adding more fields.
Sources
- https://www.notion.com/help/relations-and-rollups
- https://support.airtable.com/articles/3370222027-linking-records-in-airtable
- https://support.airtable.com/articles/8927322518-lookup-field-overview
- https://support.airtable.com/articles/5164829243-applying-conditions-to-count-lookup-or-rollup-fields-in-airtable