多对多等同于双一对多关系吗?炼金术

2024-06-02 05:18:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我想知道在这个场景中两个数据库结构之间的区别是什么:

管理员可以编辑、删除、添加Manufacturers。用户(Company)可以选择那些Manufacturers,以便将它们列在其company帐户下

使用SQLAlchemy时,A关系(两次一对多)和B关系(多对多)之间有什么区别:

enter image description here

在B方案中,多对多是这样添加的:

CompMan = db.Table('CompMan',
    db.Column('companyid', db.Integer, db.ForeignKey('company.id'), primary_key=True),
    db.Column('manufacturerid', db.Integer, db.ForeignKey('manufacturer.id'), primary_key=True)
)

所以中间表会自动出现


Tags: keyid数据库truedb关系场景column
2条回答

与SQLAlchemy的关联表(版本B)相比,创建自己的链接表(版本A)的优势在于,使用前者,您可以向链接表中添加与链接本身有关的其他列。对于关联表,只有两者之间的关系,没有其他关系。您将无法使用关联表获取该链接ID

要构建多对多关系,您必须有一个中间关系,例如CompMan

在示例B中,您没有实现多对多关系,因为没有存储公司和制造商之间关系的表

为了澄清问题,问问你自己:假设你持有任何公司的id,如何找到相关的制造商,反之亦然

相关问题 更多 >