SharePoint lists got me a long way, but the moment an app needs real relationships, server-side validation, and row-level security, a list starts fighting you. That's where Microsoft Dataverse earns its place — a managed, relational data platform purpose-built for the Power Platform. If you can model a database, you can model Dataverse; the trick is learning what it gives you above a plain table.

The vocabulary (it changed — use the new words)

Microsoft renamed the core concepts in 2020. The classic CDS/CRM terms still appear in the API, but in Maker Portal you'll see:

You'll hear / seeOlder termIt is…
TableEntityA set of rows (like a SQL table)
ColumnField / AttributeA typed property of the table
RowRecordA single item
ChoiceOption setA fixed pick-list of values

A table is more than columns

When you create a Dataverse table, you don't start from empty — every table gets a primary key (a GUID, auto-generated) and a primary name column (the human-friendly label shown in lookups and search). On top of that you add your business columns, each with a real data type:

Maker Portal — Contract table columns
Contract
Contract IDUnique Identifier
NameText (Primary)
Contract ValueCurrency
StatusChoice
Start DateDate Only
AccountLookup → Account

Table design: a GUID primary key, a primary name column, and typed business columns including a Choice and a Lookup.

Currency, Date, Choice, and Lookup are real types, not text you parse. A Currency column automatically pairs with an exchange-rate and base-currency column; a Date column distinguishes Date Only from Date and Time with time-zone behaviour you choose. This typing is exactly what a SharePoint list can't enforce rigorously.

Relationships: the whole point

Dataverse relationships are first-class and referentially enforced. There are three shapes:

Relationships
Accountthe "one" side
Contractthe "many" side

1:N relationship: the Lookup lives on Contract (the many side) and points back to Account.

Crucially, a 1:N relationship carries behaviour: choose Parental cascade and deleting an Account deletes its Contracts (and cascades assignment, sharing, and reparenting); choose Referential and the child simply keeps a reference. Getting this wrong is how people accidentally delete data — decide cascade rules deliberately.

A Parental relationship cascades deletes to children. Pick it only when the child genuinely cannot exist without the parent. For most reference links, Referential, Restrict Delete is safer — it blocks deleting a parent that still has children instead of silently destroying them.

Choices: local vs global

A Choice column is a fixed value set. You can define it locally (used by one column) or as a global choice reused across many tables. Reuse the global one for things like Status or Region so the options stay consistent everywhere and you maintain them in one place. Each option stores an integer value behind its label — handy to remember when you filter in Power Fx or query the API.

Logic that lives with the data

Dataverse pushes logic down to the data layer, so it runs no matter which app writes the row:

Rollups are asynchronous. If you need an always-current total the instant a child changes, a rollup will feel stale — use a real-time plug-in or a flow instead. Knowing this up front saves a confusing "why is my total wrong?" support ticket later.

Security is built in — and granular

This is where Dataverse leaves SharePoint lists behind. Access is governed by security roles that grant privileges (Create/Read/Write/Delete/Append/Assign/Share) per table, scoped by ownership: User, Business Unit, Parent-Child Business Unit, or Organization. Combined with row ownership and optional record-level sharing, you get true row-level security without writing a line of code.

Security role "Contract Manager":
  Contract table  →  Read/Write/Append  : Business Unit
  Account table   →  Read               : Organization
  → A manager sees every account, but only edits
    contracts owned within their own business unit.

The takeaway

Model Dataverse like the relational platform it is: typed columns, deliberate relationships with the right cascade behaviour, global choices for shared pick-lists, and logic (calculated, rollup, business rules) pushed into the data layer. Add the built-in role-based, row-level security and you have a foundation that a SharePoint list simply can't match for serious line-of-business apps. Get the model right and Power Apps, Power Automate, and Copilot Studio all just plug in on top.

DS

Dhaval Shah

Cloud Solution Architect — 18+ years across SharePoint, Microsoft 365, and Azure AI.