2012-07-20 162 views
1

我一直在構建一個Web應用程序已有一年多了。這是我學習PHP和MYSQL時開始構建的第一件事情。它已經從一個非常簡單的預編碼應用程序編碼成原始PHP,直到我每天在Codeigniter上運行的完整個人理財跟蹤器。同時我還構建了其他幾個小型網絡應用程序,結果我比我第一次開始這個項目時經歷了1年的經驗,我認爲我的開發開始受到基本設計的影響我在第1天做出的決定。規劃和設計Web應用程序結構和邏輯

雖然代碼已被重寫爲與codeigniter一起使用,但數據庫結構仍然相同,我覺得我必須編寫比需要的代碼更多的代碼才能解決我的數據庫模式問題。

我的問題是:

  1. 是否有學習如何有效地設計數據庫的任何好的資源?書籍,課程等
  2. 當我開始這個項目時,我非常「按照我編碼設計」,但我覺得也許更合理的方法是在功能級別設計所有東西,以便您可以看到流程和邏輯在寫一行代碼之前。這種發展有沒有一個特殊的名稱,還是僅僅是標準的做法? (我沒有正式的網絡開發培訓,所以我覺得我可能只是陷入了每個人都已經知道的東西)
  3. 我應該設計自己的邏輯和功能,然後設計我的數據庫,還是從數據庫開始,然後是邏輯和功能?

回答

2

1)有沒有什麼好的資源來學習如何有效地設計數據庫?

瞭解實體關係建模。 ERwin Methods Guide是一個好的開始。

但在現實世界中,數據庫不僅僅存儲數據 - 它們與客戶端應用程序進行交互,性能需要很好。 Use The Index Like!是關於這個話題的很好的介紹。

2)...

理想情況下,你有一組固定的需求,然後設計基於他們的模型,然後寫一個基於模型中的代碼。不幸的是,不斷變化的需求是生活中的事實,而這個「瀑布模型」在面臨不斷變化的需求時是脆弱的。

在頻譜的另一端是「敏捷」軟件開發,強調變化。

事實是,有no sliver bullet和最佳狀態通常介於兩者之間。

3)我應該設計我的邏輯和功能,然後我的數據庫或從數據庫開始,然後邏輯和功能?

數據往往比代碼壽命更長。所以我專注於首先獲取數據模型。如果您必須在清潔數據和清潔代碼之間做出決定,請選擇清潔數據。

這就是說,儘量讓你的數據模型「可演化」。不要走極端,比如實施EAV那裏不是真正需要的東西,而是通過規範化來避免冗餘,picking natural vs. surrogate keys sensibly,而不是人爲地限制物品的數量等。

+0

感謝這樣一個深度答案,真的很有用。在接受其他人的參與之前,我會再開放一段時間。 – SimonBarker 2012-07-24 15:55:21