2012-11-20 63 views
0

通過多站點系統,我指的是具有多個相同版本的窗格的系統。一個例子是Gamespot,它顯示不同的發佈日期甚至不同的遊戲,具體取決於你是否在uk.gamespot,us.gamespot等。在PHP中創建多站點數據庫體系結構

這裏的網站選擇不是這個問題。問題在於開發過程和易用性以及如何選擇或輸入特定於站點的數據。還有各種系統組件可能不需要特定於站點,並且在極少數情況下,爲了報告和管理目的,要求所有站點的所有數據都可見並可選擇。

以下技術已被認爲,雖然我們知道他們會的工作,我們是不滿意自己實現的繁瑣性:

表視圖 - 通過在每個我們可以表格製作針對每個網站的多個視圖加載要查詢的特定於該站點的數據。但是,內聯SQL必須動態調用正確的視圖,並且在創建新網站的情況下,必須創建一整套新視圖。

SQL修改 - 通過創建SQL中介函數,可以修改SQL以將where子句和連接更改爲僅選擇特定於站點的數據的目標列。但是,我們認爲,通過這種設備運行所有查詢可能會遇到嚴重問題,並會限制我們的查詢靈活性。

內聯網站條款 - 儘管這是最繁瑣和刺激性的實施,但它將被證明是最可靠的,因爲我們能夠在編碼方式上執行標準。雖然這可能是最可靠的,但它對我們的開發人員來說也是最不具吸引力的,這意味着要爲幾乎每一個查詢編寫網站子句。因此,我們不是找到在系統的高層實現這個系統的最佳方式,而是試圖找到一種方法,它將允許在基本級別上很簡單地實現特定於站點的數據選擇。

請讓我知道這個問題在任何方面是否過於寬泛,我會盡力進一步縮小範圍。

第一編輯:

類型跨越網站的數據的是在相對於所述表是相同的。用戶表格將在所有網站上共享,並且每個用戶只能訪問一個,部分或全部網站。

讓我們繼續介紹Gamespot的例子。一個用戶有責任管理英國版本。

關於遊戲及其評論的信息來自所有網站的記錄,因爲這是全球相關信息 但是,可以說發佈日期來自另一個特定於網站的表格。 關於遊戲的信息以典型的方式檢索,但是獲取發佈日期需要一些額外的代碼才能獲得正確的網站。

關於用戶,無論用戶當前正在管理的哪個站點都應該是選擇和插入目標的站點。

可以想象,發佈日期不是核心表格,每個日期都不能簡單地直接映射到它各自的遊戲中。

(我並不意味着有Gamespot的的運作的任何知識,這個例子假設)

回答

1

我不認爲這是一個普遍的答案在這裏,因爲我們不知道有足夠的瞭解實際您正在建設的網站。下面是幾個問題的例子,這些問題將對最佳設計產生重大影響:

  1. 這些內容大多在網站之間重疊,還是大不相同?
  2. 「普通」內容和「特定」內容之間是否有簡單的區分? (即內容對所有網站都是共同的,或者只針對一個網站)。還是它需要更靈活?
  3. 您預計需求會隨着時間的推移而發展多少?

我的建議是集中精力在正確表結構來存儲數據。如果你得到了正確的結果,一個好的軟件設計應該自然而然地從它那裏流過

當然,隨時提問您一路上遇到的具體問題!

編輯:問題更新後,我仍然認爲有很多不明確之處,只有在您制定出特定設計時才能解決。但是,如果你想快速回答,我認爲內聯網站條款是你所建議的三個選項中最好的。其他人增加了不必要的複雜層次。

我不明白爲什麼內聯網站條款是「繁瑣」和「惱人」。他們不會在良好的設計中引入重複,因爲您可以使用PHP以編程方式處理它們。

+0

我已經更新了我的問題 – Flosculus

+0

我曾預料過內聯SQL可能被認爲是最可行的。我非常想念我去尋找一顆神奇的子彈。數據庫的設計應該規範化,通過正確使用外鍵和使用站點引用作爲查詢的基本主題(如果需要),良好的設計應該看到實現相當簡單。謝謝你的回答。 – Flosculus