Configure Microsoft Dataverse
Tables, columns and ownership
Start with ownership: user- or team-owned tables participate in the business unit security model, organisation-owned tables do not and cannot be shared. Column types carry behaviour, not just storage. Choice columns can be local to the table or global solution components reused everywhere. Currency columns need a currency lookup and an exchange rate. File and image columns store binaries outside the row.
Relationships
One-to-many and many-to-many cover most models; a native N:N hides its intersect table, while a manual N:N exposes it so you can add columns. Cascade behaviour is configured per action (assign, share, unassign, delete, reparent) and per side of the relationship. Parental relationships keep the child wholly dependent on the parent and remove options such as remove-link on delete. Alternate keys give an external system a stable unique identifier and enable upsert through the Web API.
Derived and validated data
Calculated columns evaluate at read time from columns in the same row and its parent. Rollup columns aggregate related child rows and refresh on a schedule (default every 12 hours), so they must never drive an in-transaction decision. Business rules provide validation and show/hide without code; scope Entity runs server-side, scope All Forms is client-only. Use a plug-in when the logic must run on every write path, including integrations.
Security
Roles grant privileges at a depth: user, business unit, parent-child business unit, or organisation. Field-level security profiles hide individual columns and must be combined with the column and a team or user assignment. Auditing needs enabling at organisation, table, and column level; turning on the table alone audits nothing useful.
Worked example
'Another business unit must not read the records' is solved with role depth, not field security. 'A related child count must be visible on the parent grid immediately' is solved with a calculated column or plug-in, not a rollup. Ask where the logic must execute: client only, every write path, on read, or periodically.