2013-04-15 37 views
1

在我的模型設計中,場地和門票之間沒有直接關聯。場地是一對多的關係,交易和交易與門票是一對多的關係。查詢MongDB與集合之間的間接關係

場地 - >價格 - >門票

這可能是一個愚蠢的問題,但我希望有一個Tickets.findByVenueId()操作。什麼是最有效的查詢方式,並確保它發生在服務器端?我需要在Ticket模型中引用VenueId嗎?

我在Node上使用MongooseJS。

回答

1

我肯定會在每張票上都有一個VenueId。這是能夠按場地查詢門票的唯一「理智」方式。

雖然這可以視爲非規範化,但您必須有時在NoSQL數據庫中執行此操作,在這種情況下,它不是一個「麻煩」的非規範化,因爲永遠不應該有任何更新到該字段在發佈後不會改變場地),所以不存在對陳舊副本和數據完整性的擔憂。

根據您的需要,您甚至可以將其他場館數據納入票證(例如城市名稱或場館容量),以促進更復雜的查詢。顯然,這會讓你遠離「規範化」的數據庫,因此只能根據需要應用。我將要畫的第一條重點是在這些複製的字段需要更新時,因爲這可能會涉及到很多問題。

+0

謝謝Thilo。我一直在思考這個問題,我想知道將交易作爲子文檔添加到場地會更有效率,並且門票將成爲交易的子文檔。對此有何想法? – remotevision

+0

假設你有很多門票,那不會縮放。你現在擁有的東西看起來不錯。 – Thilo