The best example database design isn't the most advanced one. It's the one that matches the work people perform.
A useful schema reflects who enters data, which rules must hold, what happens next, and what managers need to see. A workbook may look like a collection of tabs, but those tabs often conceal permissions, approvals, dependencies, historical decisions, and reporting requirements. Copying each sheet into a table can preserve the mess without solving the underlying process.
The seven designs below are evaluated as potential foundations for replacing a business-critical workbook. Each example explains the structure, the workflow it supports, the trade-offs involved, and practical tactics for assessment, migration, and ongoing operation. Spreadsheet Upgrade is one relevant route when Excel has become slow, fragile, difficult to share, or difficult to govern, but the right schema still starts with understanding the process.
1. Relational Schema with Role-Based Access Control
A normalized relational schema is the strongest baseline for shared operational data. It separates core entities such as users, customers, requests, orders, and departments into focused tables, then connects them with primary keys and foreign keys. Normalization was formally introduced by Edgar F. Codd in 1970, with later normal forms defined over subsequent decades. Its purpose remains practical, reducing repeated data and limiting update anomalies in systems where several people maintain the same records. The history of database normalization explains how this design tradition developed.
For a workbook replacement, add access control as a deliberate layer rather than assuming every authenticated user should see every row. A users table can connect to roles, while role_permissions defines actions such as view, create, edit, approve, or delete. A sales contributor might edit opportunities assigned to their team, an approver might approve submitted requests without changing commercial values, and an administrator might manage configuration.
Match permissions to real spreadsheet behaviour
Start by mapping existing Excel sharing patterns. Who receives the file, who edits particular tabs, who can approve a change, and who only reads the final report? Those patterns are more useful than department names when defining roles.
Use a small initial role set, such as Viewer, Contributor, Approver, and Admin. Expand only when a real workflow requires a distinction. Row-level control is justified when records contain personal, financial, or commercially sensitive information. It adds implementation and testing effort, so don't apply it merely because the platform supports it.
Practical rule: Treat record ownership and permission as separate concepts. A user may own a request, while an approver can act on it without becoming its owner.
The migration should include permission tests with real users, including attempts to view, edit, approve, and delete records outside their responsibility. Use audit logging for sensitive work so the team can identify who changed what and when. For a practical discussion of this pattern, see role-based access control in a web application.

2. Workflow State Machine Schema for Approval Processes
A status column becomes unreliable when users can type any value into it. A workflow state machine turns informal labels into governed stages, with records moving through defined states such as Draft, Pending, Approved, and Completed.
The core structure usually includes states, transitions, and state_history. A transition specifies the starting state, destination state, permitted actor or role, and any guard condition. The history record stores the request, transition, actor, timestamp, reason, and resulting state. The current state can remain easy to query, while the history explains how the record arrived there.
Consider a purchase request. A contributor submits it from Draft to Pending. An authorised approver moves it to Approved only after required checks pass. A rejection sends it back to Draft with a reason, while completion follows document generation or fulfilment. The application can trigger notifications, create documents, or escalate overdue work from these transitions instead of relying on someone to remember a spreadsheet instruction.
Protect the transition, not just the status
Directly updating status = 'Approved' is a design failure when approval authority matters. Enforce transitions through application services, stored procedures, or both, and reject attempts that fail role, data, or timing rules. Test simultaneous approvals, unauthorised actors, rejected requests, rollbacks, and records that change while two people have them open.
An append-only event log can complement this design by preserving each transition rather than overwriting it. The distinction matters. A state machine controls what may happen next, while a history or event record explains what happened previously.

Before migration, list every status currently used in the workbook and write down the rule that moves a record forward. Include informal values such as “waiting on finance” or “needs correction”. The guide to creating an approval workflow in Excel is useful for exposing those hidden steps before they become application requirements.
The design is justified when approvals, reminders, auditability, or conditional routing matter. It's unnecessary for a simple register where status has no operational consequence.
3. Hierarchical or Tree Schema for Organisational Structure
Many business workbooks contain an approval chain, cost-centre structure, territory map, or reporting hierarchy. A self-referencing table can represent this with an id and parent_id, allowing each node to point to its immediate parent.
The simplest approach, called an adjacency list, works well when managers, teams, or cost centres change regularly. To find all descendants, the application may need a recursive query. A nested-set model stores boundary values that make ancestor and descendant reads efficient, but reorganisations require more updates. A closure table stores ancestor and descendant pairs explicitly, which simplifies repeated hierarchy queries at the cost of additional records and maintenance.
The business question should decide the representation. If the organisation changes frequently and users mostly need the next approver, adjacency lists are usually easier to maintain. If managers constantly request complete subordinate or cost-centre reports while the hierarchy changes infrequently, nested sets or a closure table may justify their complexity.
Route responsibility safely
A hierarchy needs more than parent-child links. Add effective dates when a promotion, reorganisation, or temporary delegation must apply from a particular point. Store delegation separately if an acting manager can approve without changing the permanent structure. Prevent circular references during inserts and updates, because a node cannot be its own ancestor.
For an Excel migration, extract each approval chain into one row per relationship. Don't preserve a series of columns such as manager_1, manager_2, and manager_3 unless those levels have distinctly different business meanings. A parent-child model makes changes easier when the organisation gains or loses layers.
A hierarchy is valuable only when it answers a responsibility question, such as “who approves this request?” or “which teams belong to this cost centre?”
Use stored procedures or application services for common operations, including finding approvers and retrieving descendants. That hides the chosen tree technique from everyday users and reduces the chance that separate screens implement different routing rules.
4. Denormalised Reporting Schema with a Dimensional Model
Operational records and management reports serve different purposes. A normalised transaction schema protects data entry and updates, while a dimensional model makes measures easier to aggregate and dashboards easier to query.
A star schema places a central fact table around dimension tables. The fact table records a defined business event or measurement, such as an order line, service request, invoice, or completed task. Dimensions describe the event through dates, customers, products, departments, owners, locations, or statuses.
This is an excellent fit for a workbook that mixes raw transactions with pivot tables, manually maintained summaries, and KPI dashboards. During assessment, identify every metric, its source, its grain, and its audience. “Monthly revenue by region” isn't enough. You also need to define whether the fact represents an invoice, payment, order, or adjustment, and which date controls the reporting period.
Keep reporting separate from operations
Feed the reporting layer from the operational database through a controlled extraction and transformation process. This prevents dashboard queries from competing with data-entry transactions and gives analysts a stable structure for historical comparisons.
Historical dimension changes need explicit treatment. If a cost centre changes name or an employee moves teams, decide whether old records should retain the former description. A Type 2 slowly changing dimension can preserve those historical versions, but it creates more rows and requires careful effective-date logic.
The reporting layer should reconcile against the workbook before cutover. Compare totals, record counts, exclusions, date boundaries, and rounding rules using representative data. A performance case study on a redesigned workflow platform reported average query time falling from 15–20 seconds to 2.7 seconds, complex report generation dropping from 45 seconds to 8 seconds, and backup success rising from 94% to 99.98%. The technical case study illustrates why schema quality and operational resilience matter, though those results shouldn't be treated as a promise for every migration.

A useful starting point is a guide to basic database programs, followed by a reporting inventory that names each measure and the records behind it.
5. Document-Oriented Schema for Flexible Workflows
A document-oriented schema stores related information together in JSON-style documents instead of distributing every attribute across relational tables. One customer profile might contain nested contact preferences, addresses, and optional settings. Another document type can contain different fields without requiring every record to share the same rigid structure.
That flexibility can help when a workbook has inconsistent columns, several record types, or business rules that change often. It can also hide problems. If teams use different names for the same concept, store dates in different formats, or place important values at unpredictable paths, reporting and validation become difficult.
MongoDB is commonly associated with flexible documents, while Firebase Firestore supports document storage for application backends. These technologies don't remove the need for modelling. They shift the design question toward document boundaries, validation rules, embedded relationships, indexes, and versioning.
Define flexibility before migration
Group inconsistent spreadsheet rows into meaningful document types. Identify fields that are common and important, then formalise their names, data types, and validation rules. Keep tightly coupled, rarely queried child data embedded. Use references when related records are shared, numerous, or managed independently.
Version documents when the structure must evolve. A record created under one business process may need to remain readable after a later process introduces new fields. Incremental validation lets the team begin with a workable structure, then tighten rules around fields that become operationally important.
Practical boundary: Use document flexibility for genuine variation, not as a way to avoid deciding what the business data means.
A document model is a poor fit when the workflow depends on strict foreign-key integrity, extensive cross-record reporting, or frequent joins across shared entities. Before choosing it, test the queries managers need and document naming conventions early. Flexibility without boundaries becomes a new form of spreadsheet chaos.
6. Event-Sourcing Schema with an Audit Trail
Event sourcing records changes as immutable events rather than updating a single row in place. An approval might generate an event containing the request identifier, event type, actor, timestamp, reason, and relevant values. The current state is then represented by a projection or read model built from those events.
This pattern suits records where the sequence and reason for change matter. Financial entries, compliance documents, approvals, and controlled amendments often need a defensible history. It can answer questions that a basic updated_at field cannot, including who approved a value, what the value was before the change, and which decision followed.
The trade-off is substantial. Developers must design event names, metadata, version compatibility, projections, replay procedures, and correction policies. Storage grows continuously, and current-state queries should not depend on replaying an unnecessarily long history. Snapshots can reduce replay work, but they introduce another artefact that must be created and maintained.
Use it where explanation has value
Don't event-source every low-risk description field in a small operational app. Start with an audit-risk inventory of the workbook. Mark which changes must remain explainable, which users make them, what evidence is needed, and how long the history must remain available.
A current-state view keeps everyday screens responsive. The event log remains the authoritative record for high-risk actions, while projections support search, dashboards, and workflow queues. Approval events should include the reason and approver, not merely the resulting status.
This pattern also works alongside a conventional relational schema. A request table can serve the application, while selected changes are written to an event stream. That hybrid approach often protects the most sensitive workflow without forcing every query and screen to understand event reconstruction.

ACID transactions, formally defined in 1983 by Andreas Reuter and Theo Härder, provide the familiar guarantees of atomicity, consistency, isolation, and durability for business-critical updates. This overview of ACID transactions helps explain why reliable transaction handling matters when an event and its current-state projection must remain consistent.
7. Time-Series Schema with Partitioning for Historical Tracking
A time-series schema is designed around timestamped observations. It fits KPI tracking, operational measurements, service volumes, inventory readings, and performance histories where the main questions concern change over time.
The critical design decision is grain. A workbook refreshed daily should not automatically become a high-frequency capture system. Define the timestamp precision, the metric, its dimensions, the source, and the reports it supports. A metric might be recorded by department, location, product line, or owner, but each additional dimension affects storage, indexing, and query behaviour.
Time-based partitioning can keep historical queries and maintenance manageable by separating records into time ranges. Aggregates can support trend reports without scanning every raw observation. Retention and archival should reflect business, operational, and compliance needs rather than an arbitrary technical preference.
Replace manual monitoring with defined signals
Translate each spreadsheet refresh pattern into an explicit capture policy. Decide whether a timestamp represents the observation time, import time, or reporting period. Those meanings differ, especially when late corrections arrive or people work across regions.
Add tags or dimensions for the slices managers use in practice. Create rolling aggregates where detailed observations no longer support useful decisions, and test period comparisons against production-volume data before migration. Alerts should be tied to a defined threshold and recipient, not to someone remembering to open a workbook.
Timezone handling deserves separate attention. Store operational timestamps consistently, commonly in UTC, and retain the relevant business timezone when local dates affect approvals, deadlines, or reporting. A database can be well normalised and still fail if it can't answer who changed what, when, and from where. This discussion of common database design mistakes highlights why timezone, audit, and historical-trace decisions belong in the initial design rather than as later additions.
Use a metric design sheet before migration. Record timestamp precision, dimensions, retention, correction rules, and every report that depends on each metric. That document will reveal whether you need a time-series foundation or a historical table attached to a relational workflow.
Comparison of 7 Database Schema Designs
| Pattern | 🔄 Implementation complexity | ⚡ Resource & performance implications | ⭐ Expected outcomes & quality | 📊 Ideal use cases | 💡 Key advantages / quick tips |
|---|---|---|---|---|---|
| Relational Schema with Role-Based Access Control (RBAC) | Moderate–High, normalized schema + RBAC mapping | Moderate, relational DB, auth layer; per-operation permission checks add overhead | High data integrity, granular access control, strong auditability | Shared operational data replacing Excel; compliance-sensitive multi-user workflows | Start with role-mapping; begin with 3–5 core roles; test permissions with real users; use row-level security for sensitive data |
| Workflow State Machine Schema for Approval Processes | High, state & transition tables, guard logic, history tracking | Moderate, state validation overhead, storage for histories | Strong process enforcement, prevents invalid states, complete state history | Multi-step approvals, conditional routing, formalized status flows | Model transitions and guard conditions; store reason/actor; implement as config-driven state machine; test edge cases (rollback, concurrent updates) |
| Hierarchical / Tree Schema for Organizational Structure | Moderate, pick adjacency/nested/closure based on patterns | Low–Moderate, recursion costs or extra storage (closure tables) | Accurate routing, cascading permissions, supports delegation | Org charts, approval chains, cost-center hierarchies | Map existing chains first; choose representation by read/write frequency; add effective dates and pre-validate circular refs |
| Denormalized Reporting Schema (Star Schema) | Moderate, ETL and dimensional modeling required | High (ETL, storage for denormalized facts) but very fast query performance | Very fast, intuitive reporting and dashboards; consistent metrics | Dashboards, KPI reporting, pivot-table replacements derived from Excel | Inventory metrics/grain/audience first; use SCD Type 2 for history; separate reporting layer and schedule ETL refreshes |
| Document-Oriented Schema (JSON / NoSQL) for Flexible Workflows | Low–Moderate, flexible model but needs governance | Low–Medium, horizontal scaling; more per-record storage; harder joins | Rapid iteration and flexible records; good for variable schemas but weaker cross-record analytics | Inconsistent spreadsheets, evolving workflows, mobile-first apps | Define boundaries/naming conventions early; add validation rules incrementally; use embedding vs referencing rules and version documents |
| Event-Sourcing Schema with Audit Trail | High, design events, snapshots, replay mechanisms | High, large append-only storage; snapshot & replay cost | Complete immutable audit trail; ability to reconstruct past states and debug sequences | Compliance-heavy approvals, financial ledgers, processes requiring full provenance | Use for high-risk fields only; snapshot periodically; include reason/approver in events; version event schema |
| Time-Series Schema with Partitioning for Historical Tracking | Moderate, time partitioning, retention, aggregation strategies | Optimized for high-volume time queries; requires TS DB expertise | Extreme performance for time-range queries and trend analysis | KPI tracking, monitoring, performance metrics, period-over-period reports | Define metric granularity and retention early; use rolling aggregates and tags; test queries at production scale |
Choose the Simplest Schema That Protects the Workflow
The seven designs solve different business problems. A relational schema with role-based access control is the default foundation for shared records, permissions, and maintainable operational data. A state machine adds governed approvals and explicit transitions. A hierarchical model routes responsibility through teams, managers, cost centres, or delegations.
A star schema belongs in the reporting layer when managers need consistent metrics across transactions. A time-series design is better when the core question is how a measure changes across periods. A document model supports controlled variation when record structures differ, while event sourcing preserves high-risk history where the reason and sequence of changes matter.
Choose by asking practical questions:
- Users: Who enters, reviews, approves, and reports on the data?
- Permissions: Should access depend on role, ownership, team, location, or individual records?
- Workflow states: Which transitions are allowed, and what must happen after each one?
- Reporting grain: What exactly does one transaction or measurement represent?
- History: Do you need the current value, a change log, or a reconstructable past state?
- Change frequency: Which structures change regularly, and which must remain stable?
- Migration risk: Which formulas, handoffs, exceptions, and undocumented workarounds could fail during cutover?
Don't reproduce spreadsheet tabs as database tables without assessing what each tab does. One sheet may be an input form, another may be a lookup list, another may be a report, and a hidden column may contain a critical business rule. A workflow assessment should separate those functions before anyone commits to a schema.
For teams whose workbook has become fragile or difficult to share, Spreadsheet Upgrade offers a paid assessment priced at £295 excluding VAT. The assessment maps users, calculations, handoffs, permissions, data, and edge cases before a scoped build and transition. Managed plans can include the first agreed build, hosting, backups, maintenance, security fixes, support, permissions, task-specific screens, approvals, alerts, and cutover assistance, subject to the agreed scope and plan.
The immediate action is simple. Document the current process, identify the highest-risk handoffs, and validate the proposed design with the people who use the workbook every day. Their exceptions and workarounds often determine whether an example database design becomes a dependable application or another system people avoid.
Spreadsheet Upgrade can assess your workbook, map its users, calculations, permissions, handoffs, and edge cases, then define a scoped web application build and transition. If your spreadsheet has become slow, fragile, or difficult to share, visit Spreadsheet Upgrade to discuss the workflow and the database foundation it needs.
