Data Modeling and Data Management
What you must know
Appian stores structured data in records, which are backed by a data store entity (a database table) or a web service. A record type has fields, relationships, record-level security, and views. Understand the difference between a record type (metadata + security + views) and the data store entity (the physical table and its columns). Know how to create records from a spreadsheet, how field types map to database types, and why a primary key should be a single, immutable field (often an auto-generated integer or a UUID) rather than a business value that can change.
Know the three relationship types: one-to-many (foreign key on the child), many-to-one, and many-to-many (requires a join entity). Understand record-level security (who can see which rows) versus field-level security (which fields a group can read or write), and that row-level security is expressed through a security expression or filter on the record type.
Traps
- Confusing a record type with its data store entity; deleting one does not always delete the other.
- Assuming a local variable in an interface persists; only saves through a
a!writeToDataStoreEntityor a process Write to Data Store Entity node persist data. - Forgetting that many-to-many relationships need a join table; a single foreign key cannot model them.
- Mixing up validation (field-level, blocks save) and record-level security (controls visibility).
Rule of thumb
If a question asks where a value should live so that it survives a page refresh, the answer is almost always "the data store, written by a save or a process node," not a local variable or a rule input.
Worked example
A Customer record needs many Order rows. Put a customerId foreign key on Order, define a one-to-many relationship from Customer to Order, and secure Order rows with a filter such as customer.createdBy = loggedInUser() only if that matches the business rule; otherwise use a group-based filter.