...
Every field in a entity does have a type. These types are not limited to what the database offers. Due to this fact there are fields like markdown, money or birthday, that are mappend to the correct database data types automatically. Based on the field type according data validation / sanitation is performed.
Relations
Relations between different entities can also be specified in the Module.xml file. If you access a relation by its name the related entity is lazy loaded. However this approach does not feature autocompletion in the IDE, which is why we create getter methods for relations most of the time. If you specify lookup fields in an entity those are loaded together with the entities data by default, resulting in inner join SQL statements. This enables you to create domain objects not limited to their corresponding data tables.