def add_table(self, name, columns, type_map=None, if_not_exists=False):
        """Add add a new table to the database.  For instance you could do this:
        self.add_table('data', {'id':'integer', 'source':'text', 'pubmed':'integer'})"""
        # Check types mapping #
        if type_map is None and isinstance(columns, dict): types = columns
        if type_map is None:                               types = {}
        # Safe or unsafe #
        if if_not_exists: query = 'CREATE TABLE IF NOT EXISTS "%s" (%s);'
        else:             query = 'CREATE table "%s" (%s);'
        # Do it #
        cols = ','.join(['"' + c + '"' + ' ' + types.get(c, 'text') for c in columns])
        self.own_cursor.execute(query % (self.main_table, cols))