为什么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,这是基于关系数据库设计的原则。

在多对多关系中,需要一个附加表,也称为关联表,它将第一个表中的条目与第二个表中的对应条目进行映射。

当关联表被定义时,我们需要一些主键来唯一标识关联表中的记录。使用主键可创建索引,从而加快联合操作和搜索记录。

那么,为什么所有的外键都作为关联表的主键的一部分呢? 这是为了确保没有重复条目atable A和记录bTable B。换句话说,要确保关系的唯一性,从而避免重复关系。

可以在不将外键声明为主键的情况下创建关联表。但这是不建议。通过这样做,除非明确创建索引,否则联接操作变得缓慢。而且,有很好的机会可以重复记录Table ATable B之间的关系

以上是 为什么SQLAlchemy关联对象中的外键标记为主键? 的全部内容, 来源链接: utcz.com/qa/266451.html

回到顶部