2010-04-06 35 views
0

我有一個具有許多其他應用程序和用戶的「傳統」DB2數據庫。嘗試嘗試使用Rails應用程序。通過ibm_db驅動程序獲得了一切工作良好。具有DB2和多個架構的Rails

問題是我有一些表,如schema1.products,schema1.sales和其他表,如schema2.employees和schema2.payroll。

在ibm_db適配器連接中,我指定了一個模式,如schema1或schema2,並且我可以在該模式中工作,但我需要能夠基本上可互換地輕鬆(並透明地)引用這兩個模式。我不想破壞其他應用程序,而我通常針對DB2編寫的SQL沒有任何這些限制(可以將SQL中針對DB2的模式混合起來,而不會有任何問題)。

我想僅指定表名作爲「schema1.products」,例如,並用它來完成,但似乎並沒有採用「rails方式」去實現它。

對此提出建議?

回答

0

架構在DB2是一個非常方便的方式來提供不同的命名空間,以不同的應用。例如,您可以將名爲「招聘」的應用程序的所有數據庫對象從稱爲「工資單」的說明應用程序中分離出來。您可以讓具有相同名稱的對象(表,視圖,過程等)駐留在多個模式中,而不會彼此混淆。讓你的應用程序設置一個模式是一個方便的方式,它說:「嘿,我是一個工資單,我只想用我的對象」。那麼,當你想使用另一個應用程序擁有的對象時會發生什麼?那麼,在傳統的程序編程語言中,應用程序代碼會在引用另一個模式中的對象時明確指定模式,或者您只需執行SET CURRENT SCHEMA即可切換到另一模式。 Ruby on Rails中的ActiveRecord等ORM的問題在於,您不應該使用SQL,即在引用對象時沒有很好的「Rails方式」來指定模式。您可以使用find_by_sql並在SQL語句中限定對象,但這不是RoR人員認爲的良好Rails。 您可以修復DB2端的問題。您可以在「外部」模式中爲每個表定義一個視圖,但是您必須小心地命名該視圖,以便它不會與您的主模式中已有的視圖相沖突。而且,當你這樣做時,你無疑會創建不是真正的Rails名稱的名稱。 Rails人非常自豪的「Rails方式」。它使創建新應用程序變得非常簡單。 Rails在這個領域真的很棒。但是,當涉及到Rails已經存在的內容時......我們怎麼說呢......糟透了。如果你想使用現有的數據庫結構,我建議你必須接受做不是Rails Way最好的例子。

+1

(意見篇!)這是我對Rails總體印象的總體印象......我想我對自己想要完成的事情有相當好的把握,同樣重要的是,爲什麼,以及何時啓動新項目傾向於真正同意他們。然而,試圖與可能來自其他地方的任何事物結合起來是非常可怕的。僅僅想到在生產數據庫上運行rake並不完全是從rails底部開始製作的,這真是令人恐懼。我不斷回來,雖然他們有進步和東西確實得到修復。 – GNUMatrix 2010-12-05 19:24:06

0
+0

嗯,不是我期待的,但我想這就是關鍵。這似乎迄今爲止工作得很好,儘管爲了不同的模式而建立新的數據庫連接看起來有點矯枉過正。但如果這是「鐵軌方式」,那麼我只需要習慣它。幸運的是,我只有兩個模式來處理,所以這應該工作得很好。 非常感謝! – GNUMatrix 2010-04-08 19:21:20

+0

如果您想要創建從一個數據庫到另一個數據庫的視圖,但是這首先破壞了它們的目的 – Will 2010-04-08 19:34:49

+0

在DB2本身中,我也可以使用別名,只是有點繁瑣的設置,特別是如果任何表名稱重複從一個架構到另一個架構。讓我感覺到的是,這些都在同一個數據庫中。模式基本上用作正式表前綴,而不是任何東西。我的猜測是,在其他數據庫中,它們可能有更根本的目的,但在DB2中並不那麼重要。 我試圖堅持使用rails慣例,儘量避免這種情況,因爲這樣會導致很多麻煩,所以這種多個數據庫連接的事情現在必須要做。 – GNUMatrix 2010-04-08 23:48:06