Inheritance
數據庫關係繼承
我有一家汽車銷售店。在我的商店中,我銷售多種車輛,例如汽車和船隻。我想跟踪銷售情況。
我的車輛有一些屬性:
- 在(某天)到達商店
- 品牌
- 模型
- 顏色
- 類型(是汽車還是船)
船還有一些其他特殊屬性:
- 登記處
- 容量
- 腳部空間
汽車還有其他屬性:
- 登記處
- 座位
我的訂單有以下屬性
- 車輛(應該與一些相關的車輛相關
- 契約日期
- 價值
- 買家 ID 號(是的可以為買家數據添加資料結構)。
我從來沒有兩輛相同的車輛,因為每輛車都與另一輛車完全不同(即使它是相同的品牌/顏色/型號),我不賣餅乾。
我如何在 SQL 關係數據庫中表示它?
訂單如何表達?
特別是我試圖了解這在 SQLAlchemy 中是如何工作的。
您的問題通常過於寬泛,無法在此處發表,但我會畫出一些可能有助於您入門的內容。
車輛可以是船,也可以是汽車。一個好的起點是考慮什麼可以辨識車輛?由於我不了解您的業務,因此我假設存在某種車輛 ID,請注意,這可以是屬性的組合:
CREATE TABLE VEHICLE ( VEHICLE_ID ... NOT NULL , other attributes such as brand , VEHICLE_TYPE CHAR(4) NOT NULL , PRIMARY KEY (VEHICLE_ID) , CHECK (VEHICLE_TYPE IN ('CAR','BOAT') );
如果你想鍵入安全的子類型(防止有人在 car 表中添加船),你可以在 vehicle 表中添加一個超級鍵:
CREATE TABLE VEHICLE ( VEHICLE_ID ... NOT NULL , other attributes such as brand , VEHICLE_TYPE CHAR(4) NOT NULL , PRIMARY KEY (VEHICLE_ID) , CHECK (VEHICLE_TYPE IN ('CAR','BOAT') UNIQUE (VEHICLE_TYPE, VEHICLE_ID) );
一艘船可以表示為:
CREATE TABLE BOAT ( VEHICLE_ID ... NOT NULL , other attributes such as registry , VEHICLE_TYPE CHAR(4) NOT NULL , PRIMARY KEY (VEHICLE_ID) , CHECK (VEHICLE_TYPE = 'BOAT') FOREIGN KEY (VEHICLE_TYPE, VEHICLE_ID) REFERENCES VEHICLE (VEHICLE_TYPE, VEHICLE_ID) );
和一個類似的汽車:
CREATE TABLE CAR ( VEHICLE_ID ... NOT NULL , other attributes such as seats , VEHICLE_TYPE CHAR(4) NOT NULL , PRIMARY KEY (VEHICLE_ID) , CHECK (VEHICLE_TYPE = 'CAR') FOREIGN KEY (VEHICLE_TYPE, VEHICLE_ID) REFERENCES VEHICLE (VEHICLE_TYPE, VEHICLE_ID) );
由於系統資料庫是汽車和船的屬性,您可能會考慮將該屬性添加到車輛。
訂單可以表示為(我假設這是一個可用於辨識訂單的 order_id):
CREATE TABLE ORDER ( ORDER_ID ... NOT NULL PRIMARY KEY , VEHICLE_ID ... NOT NULL REFERENCES VEHICLE (VEHICLE_ID) , BUYER_ID ... NOT NULL REFERENCES BUYERS (BUYER_ID) , other attributes such as date_of_contract );
這只是一個粗略的草圖,可能充滿了錯誤的假設。我將從確定所涉及的表開始。完成後,開始考慮是什麼標識了每個表中的一行。