Microsoft DynamicsFree referencePDF, Excel, Word exportDynamics 365 Business Central

Business Central Table Structure: Types, Keys and Relations

Business Central stores data in tables defined as AL objects. This reference lists the table types, the functional patterns you meet again and again, how keys and TableRelation work, and where to look up table information in your own system.

Download:
ConceptGroupWhat it meansExample or how to use it
Normal table
Table type
Default table type. Stored in the Business Central database and shared by all users of the company.
Table 18 Customer, Table 27 Item
Temporary table
Table type
A table variable or a table with the Temporary property. Lives in memory for the session and is not saved.
Record Item temporary; used for buffers and report data
Virtual table
Table type
System-provided table that exposes metadata or runtime data rather than stored business data.
Table Information, Field, Object Metadata style tables
System table
Table type
Platform tables in the 2,000,000,000 number range, such as users, companies and permissions.
User, Company; read with care, not meant for customization
TableType property
Table type
AL property that marks a table as Normal, CRM, ExternalSQL, Exchange or MicrosoftGraph depending on where the data lives.
TableType = CRM for Dataverse-backed tables
Master data table
Functional pattern
Long-lived business objects referenced by many documents.
Customer, Vendor, Item, G/L Account, Resource
Setup table
Functional pattern
Single-record table with one row of company-wide configuration. Primary key is usually an empty code.
Sales & Receivables Setup, Inventory Setup
Document header and line
Functional pattern
Open documents split into a header table and a line table linked by document type and number.
Sales Header 36 and Sales Line 37, Purchase Header 38 and Purchase Line 39
Posted document tables
Functional pattern
Posting moves an open document into read-only posted header and line tables.
Sales Invoice Header 112 and Sales Invoice Line 113
Ledger entry table
Functional pattern
Immutable transaction records written by posting. Identified by an Entry No. primary key.
G/L Entry 17, Cust. Ledger Entry 21, Item Ledger Entry 32
Detailed ledger entry
Functional pattern
Child table that stores the application and adjustment movements behind a ledger entry.
Detailed Cust. Ledg. Entry, Detailed Vendor Ledg. Entry
Journal line table
Functional pattern
Work-in-progress lines that become ledger entries when posted, grouped by template and batch.
Gen. Journal Line, Item Journal Line
Register table
Functional pattern
Records the range of entry numbers created by each posting run.
G/L Register 45
Primary key
Keys
First key listed in the AL keys section. Must be unique and cannot be removed.
keys { key(PK; "No.") { Clustered = true; } }
Secondary key
Keys
Additional key used for sorting, filtering and performance. Each extra key costs write time and storage.
Add a key only for a filter used often in lists or reports
SumIndexFields
Keys
Fields for which the server maintains running sums for a key, which makes FlowField sums fast on large ledgers.
Key with SumIndexFields = Amount for a Sum FlowField
Clustered key
Keys
Determines physical row order in SQL Server. By default the primary key is clustered.
Clustered = true on the primary key
TableRelation property
Relations
Field property that links a field to the primary key of another table, giving a lookup and referential check.
TableRelation = Customer."No."
Conditional TableRelation
Relations
Relation that depends on another field using if, const, field and where.
TableRelation = if (Type = const(Item)) Item else if (Type = const(Resource)) Resource
Filtered TableRelation
Relations
Adds a where clause so the lookup shows only related rows.
TableRelation = "Ship-to Address".Code where ("Customer No." = field("Sell-to Customer No."))
ValidateTableRelation
Relations
Property that decides whether a typed value must exist in the related table.
ValidateTableRelation = false allows free text with lookup
FlowField
Field type
Calculated field, not stored. Defined with CalcFormula using Sum, Count, Exist, Lookup, Average, Min or Max.
Customer Balance as Sum of Detailed Cust. Ledg. Entry Amount
FlowFilter
Field type
Filter field that is not stored, used to restrict what a FlowField calculates.
Date Filter on Customer or G/L Account
Normal field
Field type
Stored field with a data type such as Code, Text, Decimal, Date, Option or Enum.
Field 2 Name in Customer
Table number ranges
Where to look
Standard base application objects use low numbers. Per-tenant extensions use 50000 to 99999. AppSource and partner apps use assigned ranges above that.
Check app.json idRanges before adding an object
Table Information page
Where to look
Search for Table Information to see records and size per table in the current company.
Find the largest tables before a performance review
Page Inspection
Where to look
Press Ctrl+Alt+F1 on a page to see its source table, each field name and its table field number.
Identify the exact table and field behind a value on screen
Tell Me search
Where to look
Search for Tables, Fields or Table Information to browse objects and fields in the web client.
Search 'Fields' and filter by table number
AL symbols and Go to definition
Where to look
In VS Code with the AL extension, download symbols and use Go to definition on a table name.
Ctrl+click Customer to read the object source

Table names, numbers and properties can differ by release, and extensions can add fields and keys to standard tables. Confirm in your own environment with Page Inspection or the AL symbols before writing code or reports.

Need reports or an AI assistant over Business Central data?

Optional: tell us your version and hosting and we will outline a read-only, permission-aware approach. Not needed to use the reference.

Optional. The tool and every export work without this. No spam.

How to use this reference

Filter by group to see only table types, key concepts or relation rules, or type a word such as ledger, TableRelation or FlowField in the search box. The example column gives a standard table or a short AL snippet. Export the filtered list to Excel to share with a report writer or a new developer. For a list of core table numbers, open the Business Central core table numbers reference linked below; this page explains how those tables are structured rather than listing them.

Table types and functional patterns

In AL, the TableType property says where data lives, but most conversations about types are really about patterns. Master data tables hold customers, vendors and items. Setup tables hold one row of configuration. Documents are split into a header and lines, and posting moves them to posted document tables. Ledger entries are the immutable result of posting, and detailed ledger entries store applications between them. Knowing the pattern tells you where a number came from and where not to write directly.

Keys, TableRelation and FlowFields

Every table has a primary key; other keys speed up sorting and filtering at a write cost. TableRelation links a field to the primary key of another table and drives lookups and validation. Conditional relations use if and const to switch table by another field, and where clauses filter the lookup. FlowFields calculate sums, counts or lookups on demand, and are only fast when a matching key with SumIndexFields exists. Keep these in mind when a list page loads slowly.

  • Relations point to a primary key, not to any field
  • FlowFields are not stored, so they cannot be used in SQL joins directly
  • Extra keys add write cost, so add them for proven needs

Finding table information in your system

Use Page Inspection (Ctrl+Alt+F1) to see which table and field sit behind a value on screen. Search for Table Information to view row counts and size per table. In VS Code with the AL Language extension, download symbols and go to a table definition to read its fields, keys and relations. For reporting, remember that extension fields live in separate extension tables on the SQL side, and that web service and API pages are the supported way to read data, not direct SQL on SaaS.

Frequently Asked Questions

What types of tables are in Business Central?

Technically TableType can be Normal, CRM, ExternalSQL, Exchange or MicrosoftGraph, and tables can be temporary. Functionally you will see master, setup, document header and line, posted document, ledger entry, journal and register tables.

How does TableRelation work in Business Central?

TableRelation is a field property that points to the primary key of another table. It drives the lookup list and, unless ValidateTableRelation is false, checks that the value exists. It can be conditional with if and const, and filtered with where.

How do I find which table a field belongs to?

Open the page, press Ctrl+Alt+F1 for Page Inspection, and select the field. It shows the source table, field name and number. In VS Code, download symbols and use Go to definition on the table name.

Why are some Business Central values not in the SQL table?

FlowFields are calculated and not stored. Also, fields added by extensions are stored in separate extension tables joined by the primary key, so a query against the base table alone will not return them.

If your team wants to ask Business Central questions in plain language against its own tables, Netray can add a private AI layer that respects permissions. This reference does not need it.

Keep exploring

Free tools

ERP fixes and how-tos

AI on your ERP

Integrations

Comparisons

Software