SQL ForeignKey Mismatch

trulybright·2022년 3월 30일
0

테이블 A에서 ForeignKey로 타 테이블 Bcolumn C를 가리키려 했더니 ForeignKey Mismatch가 뜨는 이유는:

  • B란 테이블이 없거나
  • B란 테이블은 있는데 Ccolumn이 없거나
  • Column Cuniquecolumn이 아니거나(ForeignKeyuniquecolumn만 가리킴. 똑같은 게 여럿이면 어떤 row를 가리켜야 할지 모르니까)
  • 다음 조건 2개 중 하나라도 만족 못 해서다.
    • primary key라 명시를 하지 않고 primary key를 가리키는 경우(?)
    • 테이블 Bprimary key가 2개면 그 2개를 다 가리켜줘야 하는데 하나만 가리킨 경우

출처: https://stackoverflow.com/questions/5208245/what-is-causing-foreign-key-mismatch-error

SQLAlchemy에서 ForeignKey로 2개 이상을 가리키는 법:

class Author(Base):
    __tablename__ = 'authors'
    firstName = Column(String(20), primary_key=True)
    lastName = Column(String(20), primary_key=True)
    books = relationship('Book', backref='author')
    
class Book(Base):
    __tablename__ = 'books'
    title = Column(String(20), primary_key=True)
    author_firstName = Column(String(20))
    author_lastName = Column(String(20))
    __table_args__ = (
        ForeignKeyConstraint([author_firstName, author_lastName],
                             [Author.firstName, Author.lastName]),)

ForeignKeyConstraint를 써야만 칼럼 2개 이상을 같이 가리킬 수 있다.
출처: https://stackoverflow.com/questions/7504753/relations-on-composite-keys-using-sqlalchemy

profile
Envy Alain de Botton

0개의 댓글