2014-01-17 16 views
0

我有一個帶有兩個節點的分佈式數據庫。我有這樣一個在結點2(只在這個節點)的表:使用對兩個表的引用創建表

CREATE TABLE table2 
(
    cod_proveedor CHAR(15) REFERENCES proveedor(cod_proveedor), 
    cod_articulo CHAR(15) REFERENCES articulo(cod_articulo), 
); 

現在,我已經在節點1和節點表「危象」。

正如我們所看到的,我正在對nodo2.proveedor和nodo2.articulo執行REFERENCES,因爲我的表「table2」位於此節點「node2」中。

我要當我在創建表做參考nodo1.proveedor,但我不知道如何...

你能幫助我嗎?

回答

1

如果「分佈式數據庫」意味着您有兩個單獨的數據庫,則不能在引用另一個數據庫中的表的一個數據庫中創建外鍵約束。

您可以在數據庫2中創建一個物化視圖,將數據庫1中的所有proveedor數據拉到數據庫2,然後在數據庫2中創建引用物化視圖的外鍵約束。當然,由於在將新數據寫入數據庫1的表格之間以及在數據庫2上更新了實例化視圖時,您可能會有窗口,儘管存在父行,仍無法寫入子行在數據庫1上。如果你刪除了數據庫1中的一行,你就不會發現是否有子行會成爲孤兒,直到你試圖將這個改變複製到數據庫2爲止。你需要編寫很多代碼檢測並解決這些錯誤。

在Oracle中,使用安裝在多個物理服務器上的RAC(真正應用集羣)創建單個數據庫通常會更有意義。這將允許您在每臺服務器可以訪問數據庫的全部內容的數據庫服務器之間分配負載,而不是將數據的子集分發到不同的節點。

相關問題