2011-10-30 133 views
1

我在數據庫中有基本的泛化模式,我有超類車輛,它的子類汽車,摩托車。我通過爲每個超類/子套組合創建表來實現這些,因此我創建了汽車和摩托車表。數據庫繼承鏈接

但現在我有問題,我需要從我的另一個表中設置FK到「這兩個」這些表。所以「人」有摩托車或汽車,但從來沒有,也從來沒有更多。我如何將餐桌人與汽車和摩托車聯繫起來以實現這一目標?非常感謝你。

回答

1

不要這樣做 - 它只會導致痛苦和大量昂貴的連接。

對於整個類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 
} 
0

你可能有檢查約束或存儲過程(具體實現細節取決於你的DBMS)做到這一點。

但我認爲你應該重新考慮你的整體架構。 繼承OO概念顯然應該由客戶端代碼而不是數據庫來實現。數據庫(至少是關係數據庫)並不是用來處理這些事情的,它們並不擅長。無論如何,當你正在做這件事時,你會讓你的生活變得不必要地艱難(並且你打開了許多難以發現的錯誤的大門)...

HTH!