Schema
同一張表中的兩條記錄必須以某種方式相關
我繼承了一個有點奇怪的表,它的記錄必須以某種方式相互連結。在現實世界中,這兩個“結構”被組合成一個更大的“結構”,所以應該有一種連接它們的方法。
我應該使用“關聯表”來連結兩個 ID,**還是有更好的方法來處理這種事情?**也許我已經回答了我自己的問題,但我想我會問是否還有其他方法……
另一種選擇是刪除第二條記錄,同時在第一條記錄中添加對第二條記錄的引用作為新列。
也許這對於這個網站來說是一個荒謬的開放式問題,但我肯定不是第一個遇到這個問題的人……
謝謝,肖恩
我最終使用了一個自引用的多對多關聯表,其中一個結構可以與同一張表中的許多其他結構相關聯。
在 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 - 使用“關聯表”。