为什么SQLAlchemy关联对象中的外键标记为主键?
以下是sqlalchemy的文档。为什么SQLAlchemy关联对象中的外键标记为主键?
注意如何在关联类left_id和right_id,他们 第一标记为ForeignKey的,然后primary_key =真
这是有道理的,我认为他们应该是外键,因为逻辑上它们是外键的其他两张父母和孩子的桌子。
那么,让它们成为主键的目的是什么呢?
这是怎么回事?请解释。
class Association(Base): __tablename__ = 'association'
left_id = Column(Integer, ForeignKey('left.id'), primary_key=True)
right_id = Column(Integer, ForeignKey('right.id'), primary_key=True)
extra_data = Column(String(50))
child = relationship("Child", back_populates="parents")
parent = relationship("Parent", back_populates="children")
class Parent(Base):
__tablename__ = 'left'
id = Column(Integer, primary_key=True)
children = relationship("Association", back_populates="parent")
class Child(Base):
__tablename__ = 'right'
id = Column(Integer, primary_key=True)
parents = relationship("Association", back_populates="child")
回答:
这不是SQLAlchemy特有的。这就是如何设计many-to-many relationships
,这是基于关系数据库设计的原则。
在多对多关系中,需要一个附加表,也称为关联表,它将第一个表中的条目与第二个表中的对应条目进行映射。
当关联表被定义时,我们需要一些主键来唯一标识关联表中的记录。使用主键可创建索引,从而加快联合操作和搜索记录。
那么,为什么所有的外键都作为关联表的主键的一部分呢? 这是为了确保没有重复条目a
的table A
和记录b
的Table B
。换句话说,要确保关系的唯一性,从而避免重复关系。
可以在不将外键声明为主键的情况下创建关联表。但这是不建议。通过这样做,除非明确创建索引,否则联接操作变得缓慢。而且,有很好的机会可以重复记录Table A
和Table B
之间的关系
以上是 为什么SQLAlchemy关联对象中的外键标记为主键? 的全部内容, 来源链接: utcz.com/qa/266451.html