Appian ACD301 study materials
Appian ACD301 study resources

Appian ACD301: Data Modeling and Data Management

Appian ACD301 · Work through your exam, one topic at a time.

All guide sections

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!writeToDataStoreEntity or 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.