標籤:img 建立 欄位 編號 parent 多對一 ons int 課程
1表與表之間三種關係
1.1 一對一關聯性
舉例: 一個丈夫對應一個妻子,一個妻子對應一個丈夫
1.2 一對多關聯性
舉例:一個人可以擁有多輛汽車,要求查詢某個人擁有的所有車輛
分析:這種情況其實也可以採用 一張表,但因為一個人可以擁有多輛汽車,如果採用一張表,會造成冗餘資訊過多。好的設計方式是,人和車輛分別單獨建表,那麼如何將兩個表關聯呢?有個巧妙的方法,在車輛的表中加個外鍵欄位(人的編號)即可。
1.3 多對多關係
例如:學生選課,一個學生可以選修多門課程,每門課程可供多個學生選擇。
分析:這種方式可以按照類似一對多方式建表,但冗餘資訊太多,好的方式是實體和關係分離並單獨建表,實體表為學生表和課程表,關係表為選修表,其中關係表採用聯合主鍵的方式(由學生表主鍵和課程表主鍵組成)建表。
2 SQLAlchemy 表關係使用
2.1 一對多
比如一個父親可以有多個孩子,
class Parent(Base): __tablename__ = ‘parent‘ id = Column(Integer, primary_key=True) children = relationship("Child")class Child(Base): __tablename__ = ‘child‘ id = Column(Integer, primary_key=True) parent_id = Column(Integer, ForeignKey(‘parent.id‘))
一對多要建立雙向關係
class Parent(Base): __tablename__ = ‘parent‘ id = Column(Integer, primary_key=True) children = relationship("Child", back_populates="parent")class Child(Base): __tablename__ = ‘child‘ id = Column(Integer, primary_key=True) parent_id = Column(Integer, ForeignKey(‘parent.id‘)) parent = relationship("Parent", back_populates="children")
2.2 多對一
比如一個父親可以有多個孩子,
ORM SQLAlchemy 表於表的關係