2011-12-19 55 views
1

好吧,所以我是新的複雜的數據庫結構進入頁面。我有一個基本的人表和幾個類別。學生,老師,家長和mods。對於父母,學生和老師/ mods,還有一張表格。它基本上是一所學校的網站。如何在頁面中構建數據庫調用?

現在例如一個資料頁面,其中學生的信息顯示給家長。像誰是老師,主題,出席,家庭作業等信息。這將查詢很多表。那麼我在這裏最好的選擇是什麼?我打算以網絡應用程序的方式進行操作。我在想,也許我可以將JSON數據轉換爲帶有ajax的頁面,並讓javascript執行繁重的計算工作。所有表格只會被查詢一次。

那麼這樣做甚至可以嗎?或者當我把腳挖得太深時,我會面臨一些隱藏的問題嗎?也許我可以更深層次地完成一個巨大的JSON,並將整個數據庫發送給用戶,然後將其緩存在瀏覽器中。我不必支持真正的舊瀏覽器:)

此外,還需要考慮每次出勤和標記/結果等事情。有沒有辦法緩存每個學生的結果?像父母查看學生的結果,它會計算一次,然後在服務器上以某種方式緩存x天。

編輯:

另一個非JSON的方法我能想到的是傳統的方式。我在服務器端用php做所有的事情。這意味着我不必擔心瀏覽器兼容性。也許我可以在開始時調用所有需要的表並將其存儲爲數組。這樣一張表只能被調用一次。

EDIT 2

我讀的地方約戰地3 battlelog網站。它也是以同樣的方式。所有數據都從JSON服務器拉出,然後在客戶端計算。如果這有助於我的觀點。

+0

總是有隱藏的問題。總有多種方式可以做到這一點。從一些東西開始學習。我建議你從簡單的PHP和MySQL開始,或者如果你真的想花太多的JSON,只用couchdb和javascript做。 – hakre 2011-12-19 21:06:55

+0

@hakre我在想JASON,因爲JavaScript是我非常喜歡的東西。但不幸的是,我不認爲我可以使用除mysql以外的其他任何東西,因爲那只是我知道的數據庫,而且這是生產代碼。 – Achshar 2011-12-19 21:10:24

+0

「Jason」是來自所有那些「週五13日」電影的人:)。您正在考慮「JavaScript對象表示法」或「JSON」。 – paulsm4 2011-12-19 21:19:11

回答

1

可能搬走一些誤解,但是這是一個多回答一個冗長的評論:

你的數據庫有表和fiels。這是完全有效的。數據庫服務器的工作是存儲數據並處理查詢。你自己的代碼永遠不會比連接數據庫的代碼更好。因爲數據庫服務器已針對該任務進行了優化。

所以我認爲查詢所有數據並通過JSON將其放入您的webapp的想法是一個壞主意。如果需要特定數據,請聯繫您的服務器,服務器將構建相關的SQL查詢,將其引導至數據庫服務器,將結果返回,將結果轉換爲JSON並將其發送回瀏覽器。

+0

謝謝!但是計算結果等事情呢?由於每個問題添加了標記,因此在查看班級平均數時通常需要大量計算。因此,不要每次查詢都要先查詢數據庫以獲得結果,然後讓每個學生完成每個課程,然後通過獲取所需的問題和學生數據,然後使用JavaScript進行多級計算並將標記加入學生來更好地完成,因爲JS通常會更快,更高效,因爲每個用戶都會承擔自己的負載,而不是單個服務器來完成所有這些任務。 – Achshar 2011-12-19 21:35:11

+0

MySQL也具有聚合函數,並且可以進行算術計算。我想知道這是不是很快,因爲這可以減少您需要在服務器和瀏覽器之間傳輸的數據量。服務器端計算可能比通過線路傳輸整個數據更快。但可能不會。那麼如果你關心速度並嘗試一下,你需要找出兩種方案中的哪一種更快。你永遠不會提前知道。 – hakre 2011-12-19 21:38:42

+0

嗯seieng這樣做的JavaScript方式仍然需要瀏覽器兼容thingy,我想我應該做它的服務器端。你如何看待在頁面開始時需要的每個表的調用並將其存儲在一個變量中,然後我可以在整個頁面中多次使用它,而無需再次調用表。傳統方法處理需要來自一個表的信息但取決於來自另一個表的數據的情況的傳統方式是什麼?在循環中調用db調用是錯誤的..對嗎? – Achshar 2011-12-19 21:46:42

0

AJAX(Asynchronus Javascript和XML)僅允許您在頁面的主要部分繪製完成後即時獲取數據。所有的事情都是平等的,你可能會更容易將其設計爲標準(獲取數據然後繪製頁面)佈局。如果您正確設計應用程序,則可以在頁面呈現前或頁面呈現過程中收集執行單個組件(出席,教師,成績等)的調用。通過使用AJAX路線,存在明顯的安全隱患(URL黑客攻擊),而且我個人設計非AJAX,因爲當事情開始變得更加奇怪時,它不那麼流行。

+0

我同意你的意見,但在這種情況下,服務器是非常平均的低帶寬。 (低預算)所以我必須明智地使用這些資源,這樣它就不會在當天結束時將網站拉下來。 對於非Ajax方法,您如何看待在頁面開始時需要調用每個表並將其存儲在一個變量中,然後我可以在整個頁面中多次使用它。 – Achshar 2011-12-19 21:41:44

+0

@Achshar你或許可以脫離SQL視圖來做一些預處理,而服務器層可以做更多事情。如果你真的擔心吞吐量,我會首先剖析我的代碼,以確保我不會執行大量不必要的循環,並且還會首先尋找最大的釘子。這實際上取決於您需要查詢的數據量與您期望的訪問者數量與訪問者的計算級別之間的關係。通過卸載PoS計算機上的數據計算,它不會對他們做任何事情,因爲PoS計算機本應在10​​年前退役 – Hasteur 2011-12-19 21:55:03

+0

。我將加入這些語句,並且一次仍然使用php留在服務器端。這似乎是答案。謝謝! – Achshar 2011-12-19 21:57:55