title: SqlAlchemy drop/create all duplicate relation
body: <p>Using SQL Alchemy and declarative base to define two related tables</p>
  <pre><code>JiraBase = declarative_base(cls=_Shared)
  
  class JiraSource(JiraBase):
      id = Column(BigInteger, primary_key=True, autoincrement=True)
      name = Column(String)
      __tablename__ = 'jira_source'
  
  class JiraProject(JiraBase):
      id = Column(BigInteger, primary_key=True, autoincrement=True)
      source = Column(BigInteger, ForeignKey('jira_source.id'), nullable=False)
      project_id = Column(String, nullable=False)
      project_key = Column(String, nullable=False)
      name = Column(String)
  
      __table_args__ = (Index('source', 'project_id', 'project_key', unique=True),)
      __tablename__ = 'jira_project'
  </code></pre>
  <p>The idea behind the <code>Index</code> is that projects are uniquely identified by an <code>id</code> and <code>key</code> for a given JiraSource.</p>
  <p>The tables are being dropped and created via</p>
  <pre><code>JiraBase.metadata.drop_all(bind=self.engine)
  JiraBase.metadata.create_all(bind=self.engine)
  </code></pre>
  <p>This actually drops and creates tables fine; however, also throws an exception</p>
  <pre><code>sqlalchemy.exc.ProgrammingError: (psycopg2.errors.DuplicateTable) relation &quot;source&quot; already exists
  
  [SQL: CREATE UNIQUE INDEX source ON jira_issue (issue_id)]
  (Background on this error at: http://sqlalche.me/e/13/f405)
  </code></pre>
  <p>Thinking somehow because using both a <code>ForeignKey</code> and <code>Index</code> that both relate to <code>source</code>, is this a bad practice or something?  When I comment out the Index entirely or drop the <code>source</code> field from it, the error goes away.  Thinking that because I defined <code>source</code> as a foreign key that using it again in an index is bad or something?</p>
  <p>Any idea why I'm seeing this error?  For now am simply <code>try/ignoring</code> in code.</p>