protected function initialize()
    {
        if ($this->connection->getSchemaManager()->tablesExist([$this->tableName])) {
            return; // @codeCoverageIgnore
        }

        $schema = new Schema();

        $table = $schema->createTable($this->tableName);
        $table->addColumn('source_name', 'string', ['length' => 255]);
        $table->addColumn('rate_value', 'float', ['precision' => 10, 'scale' => 4]);
        $table->addColumn('currency_code', 'string', ['length' => 3]);
        $table->addColumn('rate_type', 'string', ['length' => 255]);
        $table->addColumn('rate_date', 'date', []);
        $table->addColumn('base_currency_code', 'string', ['length' => 3]);
        $table->addColumn('created_at', 'datetime', []);
        $table->addColumn('modified_at', 'datetime', []);

        $table->setPrimaryKey(['currency_code', 'rate_date', 'rate_type', 'source_name']);

        $this->connection->exec($schema->toSql($this->connection->getDatabasePlatform())[0]);
    }