1

我有三個實體至極的 「尋址」(可以有一個地址):多級繼承映射2

遞送點
客戶
配送中心

每個可尋址實體也是地理定位(有經度和緯度),但我是Geolocatable實體,但不是尋址,像軌跡點路線點(土地增值稅和LNGS有序序列)。

什麼是最好的方法(請考慮性能,因爲有些表可能有數百萬行),要實現這與教條2(使用Symfony2和YAML映射)?

我的問題是:這個問題最好的辦法是什麼?映射的超級類?單表繼承?多表繼承?通過閱讀教義的文檔,我沒有得到最好的結果。

我使用的是PostgreSQL,如果有問題的話。

+0

你的問題到底是什麼?一般如何多次繼承映射?通過映射超類繼承?爲什麼包含單表繼承標記?多表繼承與單表繼承的區別? – nifr

+0

@nifr我的問題是什麼是這個問題的最佳方法,映射超級類?單桌?多桌?通過閱讀教義的文檔,我沒有得到最好的結果。 –

回答

1

最快的辦法是不使用在所有的任何表繼承和映射的所有實體,以不同的表,但如果你想使用表繼承出於某種原因...

單表繼承是架構更快因爲查詢中的連接數較少...請參閱this article以瞭解表繼承的工作原理/外觀...

元數據通常被高速緩存,因此在使用映射超類之間不會有明顯的性能影響,或者爲您的每個實體提供完整的映射(對於DRY來說這將是不好的)。

真正的性能提升將來自優化您的查詢並緩存這些及其結果。

+0

謝謝。我很想簡單地將所有實體映射到不同的表以獲得性能,可伸縮性(我可以單獨更改它們)和簡單性原因,但是如果某人有一個非常好的理想,我會等一會兒。 –

+1

這就是我要做的事情...保持事情容易維護/可配置,這是最快的選擇。我很確定沒有人會在這裏提供一些棘手的答案,但我會很高興成爲錯誤的......請記住,「先期優化是一切邪惡的根源」 – nifr

3

這絕對是一種組合比繼承更適合的情況。

您用來描述問題的語言具有啓發性。作爲「可和地址,這是不同於‘A客戶是地址類型’。在後一種情況下,繼承會更有意義,可以定義「尋址」。

零級只是用協會(地址一對一地理位置,客戶一對一地址,一對一地址定位),等等)

如果您想對任何具有地址的任何操作執行一組操作,請創建一個名爲Addressable的接口,並讓您的客戶實現它。

如果你運行的是PHP 5.4,你可以使用traits來實現DRY的實現這些接口。