let unlink_column = fun column ->
    let (columns, to_be_removed) =
      List.partition (fun c -> c.col_name <> column.col_name)
        column.col_table.ta_columns
    in
    let (t_use, t_dont_use)   = vtables_using_column_part column
    and (i_use, i_dont_use)   = indexes_using_column_part column
    and (pk_use, pk_dont_use) =
      (* Phys. eq *)
      List.partition (fun c -> c == column) column.col_table.ta_pkey
    in
      column.col_table.ta_columns       <- columns;
      column.col_table.ta_pkey          <- pk_dont_use;
      column.col_table.ta_db.db_vtables <- t_dont_use;
      column.col_table.ta_db.db_indexes <- i_dont_use;
      match to_be_removed with
        | [c] -> c.col_table <- (Obj.magic 0); (t_use, i_use, pk_use <> [])
        | _   -> Dbf_misc.ie ()