Skip to content

Tabular schema and data dictionary: a practical review contract

A file can open successfully and still be impossible to interpret. Define row grain, keys, types, missingness, labels, and structural checks before anyone reviews sensitive records.

A tabular schema and data dictionary make the structure of an export visible without pretending that structure proves the meaning, accuracy, privacy status, or permission of every value. Define what one row represents, which fields identify or link it, what each column means, and which unknowns need a separate review. This is a preparation tool, not legal clearance or a quality guarantee.

Updated

On this page

Start with the row grain

Write one sentence that answers: “What does one row represent?” It might be an event, a document version, a sensor observation, or an item in a catalog. Do not use “one record” unless the source system uses that term consistently. A timestamp does not become a unique key merely because it looks precise, and a readable label does not become an identifier merely because it is easy to scan.

Start with the row grain (table)
QuestionRecord in the contract
What is the row grain?A plain-language definition of one row
What identifies a row?Key fields, composite keys, or “no stable key known”
What links tables?Join fields, cardinality expectation, or no link
What is the coverage?Source, collection period, and known exclusions
What can change?Version, update, correction, or append behavior

The W3C, (opens in a new tab) describes rows, columns, cells, and metadata as parts of an annotated table. Use that model to describe structure, not to imply that a schema proves the quality or rights of a value.

Build a column dictionary that can be checked

Keep the source field beside a human-readable definition. Record a logical type, not only a storage type. “String” does not say whether a value is a country code, a free-text note, or an opaque identifier. Give the field a boundary that another reviewer can test.

Build a column dictionary that can be checked (table)
Dictionary fieldWhat to specify
column_nameExact source header, including case and punctuation
descriptionWhat the field means at the row grain
logical_typeIdentifier, date-time, category, measurement, text, or other type
unit_or_formatUnit, timezone, date representation, or encoding rule
allowed_valuesCode list, range, pattern, or “free text”
requirednessRequired, conditional, optional, not applicable, or unknown
missingnessMeaning of blank, null, sentinel, withheld, and unavailable values
source_fieldUpstream field or transformation source
transform_ruleRename, cast, normalize, aggregate, or no transformation
quality_checkA check that can pass, fail, or remain unknown

Do not turn 0, false, or an empty string into a universal missing-value code. If the source uses sentinels, document them and preserve the difference between “not applicable” and “not observed.” The UK Government, (opens in a new tab) names distinct quality dimensions, so keep those dimensions separate in the dictionary and the review record.

Make structural metadata explicit

For a delimited file, record the delimiter, quote rule, encoding, line-ending expectation, header behavior, decimal convention, date-time convention, and treatment of embedded line breaks. For a spreadsheet, record sheet names, hidden sheets, formulas, and whether displayed values or formulas are the review target. For a JSON export, record the object shape, array meaning, nullable fields, and versioning rule.

The W3C, (opens in a new tab) recommends descriptive and structural metadata, provenance, and data-quality information. The UK Government, (opens in a new tab) points to CSV on the Web metadata for describing CSV contents and structure. Those sources support a machine-readable description, but they do not choose the correct business definition for a private field.

Make structural metadata explicit (table)
Unknown stateRecord instead of guessing
Timezone not documentedTimezone unknown; source owner question open
Join key appears in both filesCardinality not checked; relationship remains unknown
Header changed between exportsSchema version and transformation need review
Displayed spreadsheet value differs from formulaReview target must be selected and recorded

Use a decision table before any sample moves

Run the contract against an export manifest or a synthetic fixture first. Keep raw sensitive records out of this step. “Pass” means that the named structural check has evidence. It does not mean that the collection is complete, accurate, licensed, or suitable for a particular model.

Use a decision table before any sample moves (table)
Structural findingDecisionNext action
Grain and key are documentedContinueTest shape and relationship rules
Grain is clear but no stable key is knownConditionalPreserve source identifiers and note the limitation
Requiredness or null meaning is unknownHoldAsk the data owner for the codebook
Headers or types change between filesHoldVersion the schema and identify the transformation
Sensitive fields are not classifiedDo not sampleClassify fields and set an approved handling boundary
Structural checks passStructural review readyKeep rights, privacy, and accuracy as separate work

General information, not legal advice.

Validate shape without inspecting private values

The first pass can inspect a file manifest, headers, column counts, declared types, hashes, and relationship metadata. A synthetic fixture can exercise quoting, dates, null states, and multi-table joins without exposing a real person, customer, employee, patient, or message. If a real sample is necessary, use an owner-approved, redacted artifact with a documented audience and deletion path.

Keep the review record at field level

  • Record the check name, expected rule, observed state, source reference, and unresolved question.
  • Use a neutral artifact ID instead of pasting a private row into a public worksheet.
  • Treat a structural schema as separate from a de-identification decision.
  • Use the data card template for collection context and the data provenance log for source and transformation history.

A metadata description can explain structure while leaving privacy, rights, and accuracy questions open. Keep those questions visible rather than collapsing them into one quality label.

Close the review with a qualified next step

Before asking for an appraisal, confirm that you have authority to describe the collection, identify exclusions, and choose the intended use. If the scope is a supported non-health collection, use the appraisal route after preparing the dictionary. That route is a request for review, not automatic acceptance, a quote, a buyer match, a legal opinion, or a license. Do not upload sensitive raw records merely to test whether the schema is understandable.

Takeaways

  • Define row grain, keys, relationships, and exclusions before discussing quality.
  • Give every field a meaning, type, unit, missingness rule, and check.
  • Keep structure, privacy, rights, accuracy, and demand as separate review questions.
  • Use synthetic or metadata-only artifacts first, then escalate only with documented authority.

General information, not legal advice.

Sources

  1. W3C: Model for Tabular Data and Metadata on the Web (opens in a new tab)
  2. UK Government: The Government Data Quality Framework (opens in a new tab)
  3. W3C: Data on the Web Best Practices (opens in a new tab)
  4. UK Government: Using metadata to describe CSV data (opens in a new tab)

Use the appraisal route after the structural scope is ready.

Preparation does not promise acceptance, a buyer, a quote, or an offer.