我有以下關係Rails的手冊SQL
Foo
的has_many Bar
那我也不過Foo
模式Bar
只是一個String
這是一個id
。 我可以創建一個Bar
模型只包含String id
,但我想知道是否有可能以及如何使Foo
查詢所有Bars
並將其作爲list
存儲在Foo
模型中。如果我不得不使用SQL,那很好。
另一種替代方法是刪除Bar
表,然後將其作爲字段放在Foo
表中,但這需要序列化並且很難並且使SQL搜索效率低下。
架構是follwing
Foo
的has_many Foo_Bars
和 Bar
的has_many Bar_Foos
之所以沒有Foo
has_and_belongs_to_many Bar
是因爲一個Foo
或單個Bar
的添加信息將是一個永遠結尾鏈,認爲這是一個二分圖,如Foo
和Bar
是一個不相交的集合。
該數據庫與另一個應用程序共享,我使用rails作爲可視化界面來管理數據。
我的問題是我真的需要一個Foo_Bars
模型?
你會有一個隨機的酒吧,你將需要噸o查找它屬於哪個Foo?一個酒吧可以屬於多個Foo嗎?如果是這樣,你是否需要搜索所有富有的特定酒吧?根據什麼,確切地說,Foo和Bar表示以及他們的現實生活中的關係,有很多方法可以實現。一切從Foo中的序列化屬性到與連接表的has_and_belongs_to_many關係。請提供更多信息。 – JofoCodin 2013-04-03 20:53:54
是的,這是一個has_and_belongs_to_many關係,但因爲在大多數情況下,Foo實體不需要查找整個Bar信息,Bar.id足以建立關係。此外,我忘記提及獲取酒吧的信息是昂貴的,這就是爲什麼我決定只有Bar.id足夠與Foo實體一起來。還有一個包含完整信息的表格欄。 – fxe 2013-04-03 21:01:39
如果您只想拉取ID,您可以將其保留爲'Foo has_many Bars'關係並使用'foo.bars.all:select =>:id'。這將創建相當於SQL的SQL:'從bars where bar.foo_id =#{foo.id}'中選擇id。只要外鍵bars.foo_id被索引,它應該非常高效。 – JofoCodin 2013-04-03 21:40:12