Sean McCarthy Asked: 2020-09-18 15:02:02 +0800 CST2020-09-18 15:02:02 +0800 CST 2020-09-18 15:02:02 +0800 CST 同一张表中的两条记录必须以某种方式相关 772 我继承了一个有点奇怪的表,它的记录必须以某种方式相互链接。在现实世界中,这两个“结构”被组合成一个更大的“结构”,所以应该有一种连接它们的方法。 我应该使用“关联表”来链接两个 ID,还是有更好的方法来处理这种事情?也许我已经回答了我自己的问题,但我想我会问是否还有其他方法...... 另一种选择是删除第二条记录,同时在第一条记录中添加对第二条记录的引用作为新列。 也许这对于这个网站来说是一个荒谬的开放式问题,但我肯定不是第一个遇到这个问题的人...... 谢谢,肖恩 schema table 2 个回答 Voted Michael Kutz 2020-09-18T15:57:05+08:002020-09-18T15:57:05+08:00 我相信记录“这 2 个以上的项目用于制作这 1 个更大的项目”的要求称为 BOM。(材料清单)。 我在实际中看到的唯一一组 BOM 表对每个深度使用了 1 个表。您的 BOM 只需要这两个表。 TL;DR - 使用“关联表”。 Best Answer Sean McCarthy 2020-09-19T11:03:10+08:002020-09-19T11:03:10+08:00 我最终使用了一个自引用的多对多关联表,其中一个结构可以与同一张表中的许多其他结构相关联。 在 Python 的 Flask-SQLAlchemy 库中,关联表是这样表示的: structure_structure_rel = db.Table( 'structure_structure_rel', db.Column( 'primary_structure_id', INTEGER, db.ForeignKey('public.structures.id', ondelete="CASCADE"), primary_key=True ), db.Column( 'secondary_structure_id', INTEGER, db.ForeignKey('public.structures.id', ondelete="CASCADE"), primary_key=True ), schema='public' ) 这是实际的“结构”表,在 SQLAlchemy 对象关系模型 (ORM) 中表示为一个类: class Structure(db.Model): """Create a public.structures PostgreSQL table representation for use in Python Flask-SQLAlchemy """ __tablename__ = 'structures' __table_args__ = {"schema": "public"} id = db.Column(INTEGER, primary_key=True) ... # Super-cool self-referential many-to-many relationship secondary_structure_id = db.relationship( 'Structure', secondary=structure_structure_rel, primaryjoin=(structure_structure_rel.c.primary_structure_id == id), secondaryjoin=(structure_structure_rel.c.secondary_structure_id == id), backref=db.backref('primary_structure_id', lazy='select'), lazy='select' ) 然后我可以在 Flask-Admin 中使用这两个关系“列”(即 primary_structure_id 和 secondary_structure_id),这非常好。 -肖恩
我相信记录“这 2 个以上的项目用于制作这 1 个更大的项目”的要求称为 BOM。(材料清单)。
我在实际中看到的唯一一组 BOM 表对每个深度使用了 1 个表。您的 BOM 只需要这两个表。
TL;DR - 使用“关联表”。
我最终使用了一个自引用的多对多关联表,其中一个结构可以与同一张表中的许多其他结构相关联。
在 Python 的 Flask-SQLAlchemy 库中,关联表是这样表示的:
这是实际的“结构”表,在 SQLAlchemy 对象关系模型 (ORM) 中表示为一个类:
然后我可以在 Flask-Admin 中使用这两个关系“列”(即 primary_structure_id 和 secondary_structure_id),这非常好。
-肖恩