protected function renderModels()
    {
        foreach ($this->schemas as $schema) {
            /**
             * Attention, this method will request table schema from DBAL and will empty it's state
             * so schema can define it from ground zero!
             */
            $table = $this->requestTable(
                $schema->getTable(),
                $schema->getDatabase(),
                true,
                true
            );

            //Render table schema
            $table = $schema->declareTable($table);

            //Working with indexes
            foreach ($schema->getIndexes() as $index) {
                $table->index($index->getColumns())->unique($index->isUnique());
                $table->index($index->getColumns())->setName($index->getName());
            }

            /*
             * Attention, this is critical section:
             *
             * In order to work efficiently (like for real), ORM does require every table
             * to have 1 and only 1 primary key, this is crucial for things like in memory
             * cache, transaction command priority pipeline, multiple queue commands for one entity
             * and etc.
             *
             * It is planned to support user defined PKs in a future using unique indexes and record
             * schema.
             *
             * You are free to select any name for PK field.
             */
            if (count($table->getPrimaryKeys()) !== 1) {
                throw new SchemaException(
                    "Every record must have singular primary key (primary, bigPrimary types)"
                );
            }

            //And put it back :)
            $this->pushTable($table);
        }
    }