我在數據庫中有基本的泛化模式,我有超類車輛,它的子類汽車,摩托車。我通過爲每個超類/子套組合創建表來實現這些,因此我創建了汽車和摩托車表。數據庫繼承鏈接
但現在我有問題,我需要從我的另一個表中設置FK到「這兩個」這些表。所以「人」有摩托車或汽車,但從來沒有,也從來沒有更多。我如何將餐桌人與汽車和摩托車聯繫起來以實現這一目標?非常感謝你。
我在數據庫中有基本的泛化模式,我有超類車輛,它的子類汽車,摩托車。我通過爲每個超類/子套組合創建表來實現這些,因此我創建了汽車和摩托車表。數據庫繼承鏈接
但現在我有問題,我需要從我的另一個表中設置FK到「這兩個」這些表。所以「人」有摩托車或汽車,但從來沒有,也從來沒有更多。我如何將餐桌人與汽車和摩托車聯繫起來以實現這一目標?非常感謝你。
不要這樣做 - 它只會導致痛苦和大量昂貴的連接。
對於整個類heirarchy有一個表,並有一個「鑑別器」列,它可以用數字或符號來確定類型。使用僞SQL簡單的例子:
create table machine {
machine_id int auto_increment,
machine_type char(1), -- can be 'a' for auto or 'm' for motorcyle,
make varchar(255),
model varchar(255),
auto_specific_field varchar(10) null,
moto_specific_field varchar(10) null
}
你可能有檢查約束或存儲過程(具體實現細節取決於你的DBMS)做到這一點。
但我認爲你應該重新考慮你的整體架構。 繼承是OO概念顯然應該由客戶端代碼而不是數據庫來實現。數據庫(至少是關係數據庫)並不是用來處理這些事情的,它們並不擅長。無論如何,當你正在做這件事時,你會讓你的生活變得不必要地艱難(並且你打開了許多難以發現的錯誤的大門)...
HTH!