Building Data Models in Dataverse
Tables, columns, relationships, views, forms and security β the Dataverse modelling decisions that everything else in AB-410 is built on top of.
Why the data model comes first
Nadiaβs instinct is to open the app designer. That is almost always the wrong first move.
Every AI capability later in this exam β prompt columns, row summaries, generative pages, rollups β reads from the data model. Get the model wrong and those features either cannot be configured or produce nonsense. AB-410 puts data modelling in Domain 1 for exactly that reason: it is the foundation the other two domains stand on.
Standard tables versus custom tables
Dataverse ships with a set of tables that already exist β Account, Contact, and many more. These are the standard tables.
If your business concept is genuinely one of those things, use the one that is already there. If your business concept is something Dataverse has never heard of β like Kite Freightβs βDepot Runβ β you create a custom table.
The mistake to avoid is creating a custom βCustomerβ table when Account and Contact are sitting right there.
The data workspace
Tables can be created and edited from the data workspace in Power Apps β an objective that appears verbatim in the AB-410 study guide. It is the modern, maker-facing surface for working with Dataverse data: tables, columns, relationships, and the data itself in one place.
Why the exam names the surface explicitly
The study guide bullet is βCreate and edit tables in the data workspaceβ β not just βcreate tables.β When Microsoft names a specific surface in an objective, it usually means questions may reference that surface by name.
Practically, know that the data workspace is where a maker goes to model data, and that it is a Power Apps maker-portal experience rather than an admin-centre one. Mei manages environments in the admin centre; Nadia models tables in the data workspace.
Columns and data types
Choosing the right column type is a recurring exam theme, because several types look interchangeable and behave very differently.
| Column family | Use it when | Watch out for |
|---|---|---|
| Text | You need free-form text of a known maximum length | Choosing a text column for something that has a fixed set of valid values β that is a choice column |
| Choice | The value must come from a controlled list | Local versus global choices. A global choice is reusable across tables; a local one is not |
| Lookup | The value is another record | A lookup is the column side of a relationship β creating one creates a relationship |
| Number / Decimal / Currency | You need arithmetic | Currency columns bring exchange-rate behaviour that constrains what formula columns can do with them |
| Date and time | You need a point in time | Behaviour settings (user local, date only, time-zone independent) change how the value is stored and displayed |
| Calculated / Rollup / Formula | The value is derived from other data | Three different engines with genuinely different behaviour β covered in depth in Domain 3 |
| Prompt | You want AI to generate the value from other columns | It is a Dataverse data type, not a flow action β covered in the next module |
A distinction worth being precise about
A lookup column and a relationship are two views of the same thing. When you create a one-to-many relationship between Depot and Depot Run, Dataverse creates a lookup column on the many side.
This matters because exam questions sometimes describe the requirement from the column side (βeach run should record which depot it started fromβ) and sometimes from the relationship side (βa depot has many runsβ). Both describe the same 1:N relationship.
Relationships
Dataverse supports one-to-many, many-to-one (the same relationship seen from the other end), and many-to-many.
| Relationship | Kite Freight example | The consequence that gets tested |
|---|---|---|
| 1:N (one-to-many) | One Depot has many Depot Runs | This is the only relationship type a rollup column can aggregate across |
| N:1 (many-to-one) | Many Depot Runs belong to one Depot | Same relationship, viewed from the child. This is where the lookup column lives |
| N:N (many-to-many) | A Driver can be certified for many Vehicle Types, and each Vehicle Type has many certified Drivers | A rollup column formula cannot include records in an N:N relationship |
Relationship behaviour β the part people skip
A 1:N relationship carries behaviour settings that determine what happens to child records when something happens to the parent β cascading of assign, share, delete, reparent, and merge.
The exam-relevant point is that these are design decisions with real consequences. Cascade delete means removing a Depot removes its Depot Runs. Restrict delete means you cannot remove a Depot while runs still reference it.
If a scenario says βwe must never lose historical run records,β cascading delete is the wrong behaviour.
Views and forms
Two surfaces, two audiences, two sets of exam questions.
Public views define what a list of records looks like β which columns, what sort order, what filter. βPublicβ means available to users generally, as opposed to personal views a user creates for themselves.
Main forms define what a single record looks like when opened. They are the primary form type in model-driven apps, and they are where several AI features surface β the row summary bar sits at the top of a main form, which is why the next module keeps referring back here.
Forms and views are security-relevant, not just cosmetic
Domain 2 contains the objectives βConfigure access to forms and viewsβ and βConfigure access to model-driven apps.β That is a deliberate signal: forms and views participate in the security story.
Different security roles can be given access to different forms of the same table β so a dispatcher and a finance user can open the same Depot Run record and see genuinely different layouts. This is presentation-level control, and it is not a substitute for record-level or column-level security.
Security
Dataverse security is layered. AB-410 does not ask you to design a security model from scratch, but it does expect you to know which lever solves which problem.
| Lever | Controls | Typical scenario wording |
|---|---|---|
| Security role | What a user can do to a table's records β create, read, write, delete, append, and so on, at defined scopes | 'Dispatchers should be able to edit runs but not delete them' |
| Business unit | The organisational boundary that scopes many role privileges | 'Auckland staff should not see Wellington's records' |
| Team | Grouping users so roles and record shares apply collectively | 'The night shift needs shared access to the same set of runs' |
| Record sharing | Granting access to individual records outside the role model | 'Just this one run needs to be visible to the contractor' |
| Column-level security | Restricting individual columns, independent of record access | 'Everyone can see the run, but only finance sees the cost column' |
| Form and view access | Which layout a role sees | 'Finance needs a different view of the same record' |
The distinction that decides most security questions
Ask yourself: is the requirement about which records, which fields, or which layout?
- Which records β security roles, business units, teams, sharing.
- Which fields β column-level security. Hiding a column on a form is not security; the data is still retrievable.
- Which layout β form and view access.
The classic wrong answer is βremove the column from the formβ in response to a genuine confidentiality requirement. That is cosmetic, not secure.
Kite Freightβs model
Nadiaβs first pass, after Ravi describes the operation:
| Concept | Decision | Why |
|---|---|---|
| Customer | Extend the standard Account table | Dataverse already models organisations; duplicating it would fragment the data |
| Depot | Custom table | Genuinely specific to Kite Freightβs operation |
| Depot Run | Custom table, 1:N from Depot | A depot has many runs; the lookup lives on Depot Run |
| Driver β Vehicle Type | N:N relationship | Both sides are genuinely many β but Nadia notes this rules out rollups across it |
| Run cost | Currency column, column-level secured | Everyone sees the run; only finance sees the cost |
| Run status | Choice column | Controlled list, not free text |
Mei reviews the security design, because security roles and business units are administrator territory.
Quick recall
Check yourself
Kite Freight must keep Cost as a column on the Depot Run table. Every user must be able to open the Depot Run record, but only the finance team may retrieve the cost value. What should you configure?
Nadia models Drivers and Vehicle Types with a many-to-many relationship. Later, Ravi asks for a column on Driver showing the number of vehicle types that driver is certified for. What is the problem?
Ravi asks for a 'Customer' concept in the new solution. Dataverse already contains the standard Account table, which models organisations. What is the better design recommendation?