Behind the Names: Unlocking Schema and Logical Names in Dataverse
Schema and Logical Names in Dataverse form the backbone of how data is structured, stored, and referenced within the platform. The Schema Name is a system-level, immutable identifier created when a table or column is generated; it is mainly used by developers, plugins, integrations, and API calls. It follows a strict format (prefix + name) and does not change even if the display name changes, ensuring long-term stability for solutions and custom code. The Logical Name, on the other hand, is the programmatic name Dataverse uses internally and externally when accessing data through the Web API, SDK, Power Automate, or Power Apps. Logical names are unique and aligned to the physical storage in the Dataverse database. While schema names provide structure and a consistent metadata definition, logical names enable efficient data operations and integration. Together, they create a reliable separation between user-friendly labels and system-driven identifiers, ensuring stability, consistency, and compatibility across environments, solutions, and automation.
- PascalCase naming (e.g., new_CustomerCategory)
- Used inside solution XML files
- Used by Power Apps Studio and Solution Explorer
- Cannot be changed after creation
- Human-readable & organizationally branded
- Critical for ALM, packaged deployments, and upgrades
- Solution XML (customizations.xml)
- Plugin registration tool (for referencing images)
- ERD diagrams
- Relationship schema (1:N, N:N)
- Model-driven app expressions
- Useful for documentation
- Ensures consistency and readability
- Used in relationship metadata
- Maintains clear naming conventions
- Web API (OData calls)
- SDK / C# Plugins
- Power Automate Dataverse connectors
- Query building and metadata lookups
- Internal storage engine
- Lowercase, underscore format (e.g., new_customercategory)
- Immutable (never changes once created)
- Required in all API calls
- Designed for machine efficiency
- Safe for URLs and OData standards
- C# plugin code: entity["crbe_firstname"]
- JavaScript: formContext.getAttribute("crbe_firstname")
- Web API: /api/data/v9.2/crbe_customerfeedbacks
- Power Automate Dataverse actions
- The system executes using this name
- Changing display names has no effect
- Used by all backend components
- Ensures stable API integrations
- Avoids collisions with Microsoft standard entities
- Helps identify your solution components easily
- Mandatory for ALM and managed solutions
- Good: Customer, Invoice, CardList
- Avoid plural: Customers, Invoices
- Good: GSTNumber
- Not good: GN
- abc_CardLististLink
- Not: abc_DetailTable
- Use: abc_AccountRiskAssessment
- Use PascalCase for schema name
- abc_IsBlacklisted
- abc_ConsumptionPerMonth
- abc_IsPrimary
- abc_HasActiveSubscription
- abc_CanBeBlacklisted
- abc_ContactId
- abc_AccountId
- abc_CustomerType
- abc_ApplicationStatus
- abc_ApprovalDate
- abc_InvoiceDate
- Format:
- publisherPrincipalTable_dependentTable
- abc_Account_CardAccount
- Format:
- publisherTable1_Table2
- abc_Account_Opportunity
- Always include
- Purpose
- Filter Criteria
- Active Card Accounts
- Expired Licenses (Last 30 Days)
- Accounts With Blacklisted Cards
- Format:
- Main – Purpose
- Quick – Purpose
- Main – Blacklist Management
- Quick – Contact Summary
- Account – Onboarding Process
- CardAccount – Blacklisting Review
- Format:
- System/Team – Entity – Action – Additional Info
- Ops – Account – Populate Blacklisting
- CRM – Lead – Convert to Account
- Finance – Invoice – Send Reminder Email
- Format:
- App – Role Level
- Cards – Administrator
- Cards – Read Only
- Sales – Manager
- Identifies components inside a solution
- Used by solution packaging, deployment, and ALM
- Required during component references in forms, views, relationships
- Supports PascalCase for readability
- Must be stable for export/import across environments
- Metadata in solution.xml, customizations.xml, and relationship.xml uses schema names.
- Ensures deterministic referencing, meaning solutions can be reliably imported/exported.
- Used by Dataverse database engine
- Used in Web API, OData, SDK, and Plug-ins
- Lowercase + underscores → URL-safe and API-friendly
- Optimized for querying, joins, filter expressions, and indexing
- For database tables/columns
- For runtime metadata lookups
- For Web API routes (/api/data/v9.0/abc_customers)
- PascalCase
- Easy for developers & solution designers
- Visible mainly inside apps (Power Apps Studio, Solution Explorer)
- Lowercase
- Must follow strict technical rules
- Used internally by Dataverse engine & APIs
- UI & metadata naming (schema name) to evolve
while
- the API/runtime naming (logical name) remains stable
This prevents breaking:
- Plugins
- JavaScript
- Workflows
- Power Automate flows
- External integrations
- Web API calls
- Lowercase names
- No uppercase (preferred)
- No special characters
- URL-safe identifiers
- lowercase
- underscores
- no spaces
- Solution upgrades do not change API names
- Managed solutions update UI labels without breaking API contracts
- Teams can rename display names without breaking logic
- Resolve metadata references quickly
- Build cache keys
- Generate SQL queries to underlying storage
- Manage partitioning & indexing
- Change Display Name anytime
- Keep Schema Name readable
- Expose Logical Name only to developers
- Better UX
- Friendly UI labels
- Clean developer experience
Schema Name = for developers
Logical Name = for machines
Published on:
Learn more