# Lesson 11: Advanced modeling

In this lesson, we’ll learn how to use the PERA model to design TypeDB schemas that eliminate mismatch with application models. We’ll begin by reviewing the fundamentals of the **entity-centric framework** of the PERA model, and how PERA types can be mapped onto to OOP types using the **type-theoretic framework**. We’ll then have a close look at using relations in this framework, and learn about the **reification** and **de-reification** processes. Finally, we’ll see how we can implement design by contract as a schema design strategy using **interface contracts**.

The application classes featured in this lesson are written in Python.

## [](#_recommended_prerequisites)Recommended prerequisites

*   You should complete [Lesson 9](../9-modeling-schemas/index.md) before starting this lesson.
    

## [](#_lesson_contents)Lesson contents

[Lesson 11.1: Using dependent types](11.1-using-dependent-types/index.md)

Learn about the type-theoretic framework of the PERA model.

[Lesson 11.2: Using type-theoretic relations](11.2-using-type-theoretic-relations/index.md)

Learn how to represent application classes with relations.

[Lesson 11.3: Reifying interfaces](11.3-reifying-interfaces/index.md)

Learn how to safely substitute binary relations for roles.

[Summary](../10-using-functions/summary/index.md) [Using dependent types](11.1-using-dependent-types/index.md)

[Edit on GitHub](https://github.com/typedb/typedb-docs/edit/3.x-development/academy/modules/ROOT/pages/11-advanced-modeling/index.adoc) Edit this page on GitHub.