2013-01-16 39 views
1

我正在爲一個複雜的拍賣網站設計一個在線市場。處理具有參照完整性的多個數據庫的最佳方法

考慮到每個數據庫的增長和複雜性的潛力,我將成員和產品的數據庫分開。問題是如何處理兩個獨立數據庫之間的參照完整性?這些關係可以是一對一或一對多的關係。我已經讀了很多關於使用觸發器的信息,將表格從一個數據庫複製到另一個數據庫;顯然不會以孤行行結束。

我知道網站上有類似的問題,但沒有一個具體的答案。

+0

我也在考慮使用服務器端應用程序代碼來檢查事物而不是使用觸發器。 – Hamada

回答

2

考慮到每個數據庫的增長和複雜性的潛力,我將 分隔成員和產品的數據庫。問題是 與兩個獨立數據庫之間的參照完整性有關嗎?

這可能是一種可以防禦的策略,也可能是一場災難。它部分取決於你的dbms。在大多數情況下,你會用多個模式來處理這種問題,而不是多個數據庫。 (從這個意義上說,一個模式就是你在運行CREATE SCHEMA statement時得到的模式。)外鍵引用在多個模式中工作正常。許多支持多個SQL模式的dbms 不支持支持對其他數據庫的簡單外鍵引用。

MySQL不支持CREATE SCHEMA。相反,MySQL數據庫的行爲非常像SQL模式。

CREATE SCHEMA is a synonym for CREATE DATABASE

+0

我完全同意你對使用模式的看法。我正在使用SQL Server 2008 R2。我只是不明白分離如何不會大大提高性能。當一個數據庫擁有如此多的併發連接時,它如何能夠處理所有的請求?我懷疑AT&T將所有用戶的所有電話記錄保存在同一個數據庫下。他們必須通過區號或其他性質將他們分開。 ---順便說一句,就我的問題而言:我現在談論的是在同一個實例上分離數據庫。 – Hamada

+0

SQL Server不支持跨數據庫的外鍵。您最好的解決方案是將表保存在同一個數據庫中,並使用外鍵引用來保持數據的完整性。您嘗試使用應用程序代碼在多個數據庫中維護數據完整性的最糟糕選擇。你現在有什麼性能問題? –

+0

感謝您提供關於SQL Server的寶貴技巧。這是否意味着我無法以這種方式關聯表:SQL Server中的database_name.table_name.column_name(PK)= database_name.table_name.column_name(FK)?我現在就嘗試一下,因爲我以前從來沒有這樣做過。我已經和其他人一起聽取了您的建議,現在將使用單個數據庫。我的表現問題現在真的不存在。我正在計劃預期的未來增長。我想如果我能達到那個程度,那麼就算未來僱傭最好的數據庫管理員,也沒有什麼錢不能買到。 – Hamada

1

不要分開。數據庫的處理能力取決於託管數據庫的服務器的處理能力。如果有兩種不同的模式,那麼你可能會想到因任何原因而分離。對於相同的模式符合條件的對象,我建議不要分開,而是在更好的供電服務器上進行託管。

+0

我很想這樣薩蒂斯。這讓我的生活變得更加輕鬆。我從來沒有做過這麼大的項目。假設我有100萬個用戶和9000萬個產品在同一個數據庫和200多個表中,那麼這會成爲一個主要問題,而不是更快和更大的硬件,或者所有這些查詢在同一個數據庫中簡單地殺死性能。它成爲一個性能問題,而不是最大限度地提高SQL Server的性能。 – Hamada

+0

當您嘗試使用這些許多用戶和產品時,並非所有用戶都將處於活動狀態,並且並非所有產品都會與用戶關聯。將表格拆分爲LIVE_USERS和PASSIVE_USERS。同樣的LIVE_PRODUCTS和PASSIVE_PRODUCTS。然後將PASSIVE_USERS和PASSIVE_PRODUCTS放在一個單獨的數據庫中,我假定在單獨的服務器上。它不認爲只需將USERS和PRODUCTS全部存儲在單獨的數據庫中即可提高性能。 – Satish

+0

這不是一個壞主意,但您希望不活動或停用的產品仍然顯示在線以獲取流量,因此它仍會使用數據庫資源。就用戶列表而言,你是對的,他們中的許多人將變爲非活動狀態,並應將其移至歸檔表。我仍然不是100%確定。我一直在線閱讀,整個dba社區在這個相同的話題上被分爲50/50。 – Hamada

相關問題