hook_field_schema not being used I'm trying to create a field with an additional property (or column) to define an extra relationship to a taxonomy term.

I have this in my module file:

/**
 * Implements hook_field_info().
 */
function emtr_field_info() {
    return array(
        // We name our field as the associative name of the array.
        'field_emtr_denominations' =&gt; array(
            'label' =&gt; t('Denominations'),
            'description' =&gt; t('Field linked to target entity as well as denomination taxonomy term holding denomnation value.'),
            'default_widget' =&gt; 'number',
            'default_formatter' =&gt; 'number_decimal',
        ),
    );
}


And this in my install file:

/**
 * Implements hook_field_schema().
 */
function emtr_field_schema($field) {
    $columns = array(
        'denomination_value' =&gt; array(
            'type' =&gt; 'int',
            'not null' =&gt; FALSE,
        ),
        'denomination_tid' =&gt; array(
            'type' =&gt; 'int',
            'not null' =&gt; TRUE,
            'default' =&gt; 0,
        ),
    );
    $indexes = array(
        'denomination_tid' =&gt; array('denomination_tid'),
    );
    return array(
        'columns' =&gt; $columns,
        'indexes' =&gt; $indexes,
    );
}

/**
 * Implements hook_enable().
 */
function emtr_enable() {

    field_cache_clear();
    field_associate_fields('emtr');

    if (field_info_field('emtr_denominations')) return;

    // Create a field for denominations to be used by safe checks and till reads
    $field = array(
        'field_name' =&gt; 'emtr_denominations',
        'type' =&gt; 'field_emtr_denominations',
        'cardinality' =&gt; FIELD_CARDINALITY_UNLIMITED,
        'translatable' =&gt; FALSE,
    );
    field_create_field($field);

    // Attach the emtr_denominations reference field to safe checks instance
    $instance = array(
        'field_name' =&gt; 'emtr_denominations',
        'entity_type' =&gt; 'emtr_safe_check',
        'bundle' =&gt; 'emtr_safe_check',
        'label' =&gt; 'Denominations',
        'required' =&gt; false,
        'widget' =&gt; array(
            'type' =&gt; 'number'
        ),
        'settings' =&gt; array(
            'target_type' =&gt; 'emtr_safe_check',
            'handler_settings' =&gt; array('target_bundles' =&gt; NULL),
        ),
        'display' =&gt; array(
            'default' =&gt; array('label' =&gt; 'inline', 'type' =&gt; 'number_integer'),
        ),
    );
    field_create_instance($instance);
}


But after uninstalling and re-enabling my module (drush devel-reinstall emtr -y
) a table called field_data_emtr_denominations is created but it does not have my 2 custom columns.

At what point in this process should I tell Drupal to use my custom field_schema?
You should remove function emtr_enable() out of the .install file, and place its code in a more proper hook where the field is meaningful to be created, like for instance hook_node_type_insert() or EntityAPIController-derived class for your entity bundle, etc.  It depends on what one wants to achieve really.