Oddity database catalog

Local data built for real projects

Launch directories, location tools, research products, and business applications with structured data you can actually use.

Browse recent data
Modern connected city and location data visualization
Flat CSV files transforming into a connected and governed business data system

CSV Is Not a Strategy: Moving Structured Data Into a Working Business System

CSV is one of the most useful formats in business. It is portable, readable, easy to generate, and supported almost everywhere. It is also a poor substitute for identity, validation, permissions, workflow, history, and recovery. A folder of files can carry data, but it cannot operate a business.

Use CSV for exchange, not authority

A comma-separated file is a snapshot. It represents rows and columns at a particular moment, usually without durable relationships to earlier or later versions. That makes it excellent for import, export, handoff, inspection, and compatibility.

Problems begin when several people edit copies, email attachments, rename columns, change field meanings, or treat the newest filename as the source of truth. The file does not know which copy is authoritative, who changed a value, whether a relationship is valid, or which downstream process depends on it.

Recognize the operating functions a file cannot provide

A working business system does more than store values. It establishes stable identities, connects related records, controls access, validates transitions, preserves history, and exposes unfinished work.

  • A customer has one immutable identifier even when contact details change.
  • An order remains connected to its customer, line items, payment evidence, and fulfillment.
  • A product version can be traced to a source, schema, sample, and deliverable file.
  • A consent decision retains its source, time, topic, and lifecycle events.
  • An administrator’s changes retain before-and-after revisions and audit evidence.

CSV can carry columns for these concepts, but it cannot enforce their meaning by itself.

Start with the decisions the data supports

Do not begin a migration by copying every column into a new table. Identify the questions and actions the system must support. Which customer needs attention? Which invoice is unresolved? Which product is ready to publish? Which source record changed? Which download failed? Which communication is suppressed?

These decisions reveal the required entities, relationships, states, and history. They also separate useful fields from inherited clutter. A field belongs in the authoritative model because it supports a defined business purpose, not merely because it appeared in an old export.

Create stable identities before relationships

Names, email addresses, filenames, and row numbers are poor primary identifiers. They change, collide, and get reformatted. Assign immutable internal identifiers to customers, products, orders, items, files, tickets, subscriptions, and workflow runs.

Preserve meaningful public identifiers and original source references where compatibility requires them. Do not expose database internals unnecessarily, and do not recycle identifiers after records are archived. Stable identity allows revisions, links, audit history, and reconciliation to remain trustworthy.

Model relationships explicitly

Flat files often repeat the same customer or product information across many rows. A relational system stores the customer once, the order once, and each order item as a connection between the order and product. This reduces contradictory updates and makes ownership clear.

Normalization should serve operations rather than become an academic exercise. Keep closely related facts together, use linking tables where relationships are genuinely many-to-many, and provide efficient read models for common workspaces and reports.

Define field meaning and validation

A column named “status” is not a data model. Document its allowed values, transitions, owner, default, and business meaning. Decide whether blank means unknown, not applicable, pending, or invalid. Specify time zones, currency, units, encodings, and identifier formats.

Validation belongs at system boundaries and in the database where practical. Reject malformed dates, unsupported states, duplicate identities, unsafe paths, and impossible relationships before they enter authoritative tables. Preserve rejected rows with a safe reason so imports can be corrected rather than silently losing data.

Import rule

Never let a convenient spreadsheet overwrite authoritative records without a preview, validation report, ownership check, revision plan, and recoverable import run.

Build an explicit import pipeline

A dependable import is a workflow, not a single upload button. Register the source file, hash it, record the actor and purpose, map fields, validate rows, preview changes, approve the scope, apply writes transactionally, and retain results.

  1. Store the original file as immutable import evidence.
  2. Detect encoding, delimiter, header, and line-ending variations.
  3. Map source fields to documented target fields.
  4. Normalize values without destroying the original representation.
  5. Classify rows as create, update, unchanged, conflict, or rejected.
  6. Preview exact counts and consequential changes.
  7. Apply the approved run with an idempotency key.
  8. Record row-level outcomes and before-and-after revisions.
  9. Reconcile destination counts and totals.

Keep provenance with the record

Operational data becomes more useful when people can see where it came from and how current it is. Record the source system, source identifier, import run, original timestamp, transformation version, reviewed date, and last successful refresh where relevant.

Provenance is especially important for purchased data, public records, partner submissions, and derived statistics. It helps operators evaluate reliability and supports later corrections without pretending every field has equal authority.

Preserve history instead of overwriting it

Editing a row in a spreadsheet usually replaces the previous value. An operational system should retain revisions for identity, contact, catalog, financial, consent, and administrative changes. Append-only events explain state transitions while current summary fields keep normal reads fast.

History must be useful rather than indiscriminate. Store the actor, time, changed fields, reason, source, and safe evidence. Avoid copying credentials, raw tokens, or unrelated personal information into logs.

Use permissions that match the work

A shared file often grants everyone similar access. A system can distinguish viewing from editing and separate customer identity, billing, content, support, communications, roles, and system administration.

Apply permissions both to interfaces and serialized data. Hiding a column in a table does not protect it if an endpoint still returns it. Every write should use CSRF protection, server-side validation, and administrative audit evidence.

Turn data into actionable queues

Once records have identity, state, and relationships, the system can show work that needs attention: registrations past the confirmation window, unpaid invoices, payment mismatches, failed downloads, customer-waiting tickets, stale imports, missing catalog assets, or suppressed communications.

Queues should link directly to authoritative workspaces. They should not silently perform customer contact, financial changes, publication, or security actions. The dashboard helps the operator decide where to work; the record workspace controls the change.

Keep export as a first-class capability

Moving beyond CSV does not mean abandoning it. Customers, analysts, partners, and recovery procedures may still need portable exports. Generate exports from documented views, include clear headers and encoding, and record when sensitive exports are created.

Provide schema notes, field definitions, units, time zones, and filters alongside the file. A good export is a supported interface, not a database dump with unexplained columns.

Plan migration in verifiable stages

Inventory files and classify them as canonical, duplicated, historical evidence, temporary working data, or obsolete. Establish counts, hashes, high-water marks, and known conflicts. Import bounded groups and compare source and destination results before activating the new workflow.

Keep the former source read-only for a defined archive period after acceptance. Do not continue permanent dual writing. Once the new system is authoritative, all changes should flow through its validation, permissions, and revision controls.

A practical readiness checklist

  • Every important entity has an immutable identifier.
  • Relationships and ownership are enforced.
  • Field definitions, states, time zones, and encodings are documented.
  • Imports are previewed, idempotent, revisioned, and reconcilable.
  • Rejected and conflicting rows remain visible for correction.
  • Permissions filter both interfaces and returned data.
  • Operational queues expose unfinished or contradictory work.
  • Exports remain documented, portable, and controlled.
  • Backups, rollback, monitoring, and recovery are tested.

Let files serve the system

CSV remains valuable because it is simple. The mistake is asking that simplicity to provide responsibilities it was never designed to carry. A trustworthy operating system surrounds files with identity, meaning, relationships, validation, workflow, and evidence.

The goal is not to eliminate spreadsheets or flat files. It is to put them in the right role. Use them to exchange and inspect data while the authoritative system protects the business decisions, customer relationships, and operational history built on top of it.

Community discussion

0 approved comments

Account-linked contributions reviewed by Oddity staff.

No approved comments yet

Start a useful discussion below. Your contribution will appear after staff review.

Oddity Data Updates

Know when fresh data arrives.

Receive occasional notices about new and substantially updated database releases. No third-party mailing list.

Oddity Software

Details