2010-01-28 183 views
2

基本上我的工作是開發使用數據庫作爲後端的Web應用程序。我一直在做,直至現在的問題是,
Basded在客戶的要求,設計數據庫

  • 我畫的 表是什麼基本的描述,他們怎麼看起來像那些表中
  • 領域和一些一對一或多對一或多對多的關係

儘管我對這些事情並不完美,但我試圖弄清楚我的過去項目中的關係應該如何上。但在我看來,這仍然存在一些疑問。

如果客戶端詢問他想要一個特定的數據,我試着通過直接SQL查詢來實現它,或者認爲scritp(在大多數情況下是PHP),如果我根本無法弄清楚查詢特別要求。

現在,來了我的問題。

根據我 想通了,同時開發表, 在那裏什麼 客戶端可以問任何限制的關係?我的意思 這是說,客戶會問他 希望列表中的所有indidual 產品,它們的數量,相關 類別的
類別中的所有罪名,該產品在每個 類別和其價格,總計 所有類別的價格和 總價格如此之多。

這只是一個請求來解釋我的情況的例子。

現在,如果有任何請求可能需要更長時間來執行,開發人員是否可以通過分解請求來滿足此請求? 我需要告訴他爲什麼這個分解是必要的? 如果他覺得我無法在一次拍攝中做到這一點,該怎麼辦?

他要求的每個報告都需要在單個查詢中嗎?或者是否需要藉助PHP來處理一個循環,並根據我得到的值,我將一些條件應用於客戶需要的規則?

做這種工作的更好方法是什麼?

任何視圖?

謝謝。

回答

0

支付賬單的人可以要求他們想要的任何東西。如果他們要求的東西確實沒有意義,那就試着讓他們看到理由。

業務需求不應該被改變或刪除,因爲它可能很難實現。

設計您的數據庫模式以反映域模型並規範化爲至少3NF。

通常,可以實現聚合查詢(例如通常用於驅動報表的那些查詢),以利用索引和RDBMS特定功能來減少它們的運行時間。

4

這通常取決於所使用的數據庫。

大多數查詢可以在一個單一的選擇來實現,但這種shoudl從不看查看/子選擇/存儲過程阻止你。

你應該能夠處理大部分的查詢以這種方式,所以我會建議:

不要讓輸出決定如何設計數據庫,這可能會導致你在錯誤的道路。您需要以適合應用程序的最規範化的時間存儲數據。

+0

這就是'爲設計而設計',設計師有兩條途徑來解決任何問題在手邊,規範化和非規範化。反規範化正是試圖解決性能問題,換句話說就是將輸出考慮在內以決定最佳設計。 – 2010-01-29 14:44:02

0

您應該看一下requirement specification的一般原則,並代表您的客戶的需求,例如user stories,這是用戶希望執行的任務。然後,您可以將每個用戶故事作爲一個工作單元進行計算。應該可以一次處理一個用戶故事,因此您可以就您將交付它們的順序達成一致。

最好將每個故事/查詢看作是單獨的。這樣,您可以根據客戶的需求添加或刪除功能。如果你發現常見的模式,你可以隨時重構它們。

許多問題來自人們試圖過度優化或過度泛化。除非您發現它們開始重疊,否則我會分別編寫每個查詢。

+0

但編寫查詢假定您已經考慮了數據庫設計。 – Tom 2010-01-28 16:54:43

+0

是的。我想我假設模式設計將遵循數據的最佳模式。這個問題似乎更傾向於查詢的設計。 – Joe 2010-01-28 16:56:52

0

聽起來你只是需要提高你的數據設計技能。正如我們所建議的那樣,正確設計/規範化的數據庫不會遇到您所擔心的問題。但是,如果你只是不斷從錯誤中學習,那麼學習設計數據庫的正確方法需要很長時間。當我開始作爲網絡開發人員時,我發現Database Design for Mere Mortals有助於向您展示如何避免將自己繪製到角落。關於如何在數據庫上編寫好的查詢還有companion book。這兩本書不會教你所知道的一切,但它們給你一個很好的基礎。

+0

數據庫設計爲單純的凡人是我最近開始遵循最近現在谷歌搜索 – JPro 2010-01-28 18:01:19

1

很多問題!

根據我 想通了,同時開發表, 在那裏什麼 客戶端可以問任何限制的關係?

客戶可以真正要求什麼。客戶並不總是理性的。幫助客戶考慮他們的需求是您工作的一部分。

我的意思是說這個就是, 客戶會問他想要列表中的所有 的indidual產品,它們的計數, 相關類別的 類別中的所有罪名,該產品在每個 類別和他們的價格,所有類別價格總和 和價格總和 等等。

所有這些查詢聽起來都可能與SQL有關。要列出單個產品,請使用SELECT語句。要計算使用COUNT。要獲得關聯的類別,請使用JOINS。使用SUM來獲得總價。

現在,如果有,可以 可能需要更長的時間 exection任何要求,可以開發滿足 通過分解 請求,這個請求?我需要告訴他爲什麼 這個分解是必要的嗎?

是 - 打破請求可以幫助客戶瞭解他們的需求。

如果他 覺得我沒有能力做到 它在一個鏡頭?

否則說服他。如果你想保持他的生意,你不希望他覺得你很愚蠢。 :)

他請求的每個報告都需要 在單個查詢中嗎?或將有 任何需要藉助PHP 處理一個循環,並根據我得到的 值,我把一些 條件應用規則, 客戶端要?

真的取決於你的技能水平。如果您足夠了解SQL,則可以在一個查詢中獲取大部分數據。如果你不那麼好,那麼你可以做一些查詢,然後在PHP中循環。通常,在SQL中執行所有操作會更快。

做這種工作的更好方法是什麼?

你正在爲自己工作嗎?如果是這樣,有時候只需要經驗就能找出最好的方法。 (並張貼到計算器:)

+0

非常感謝您回答 – JPro 2010-01-28 18:07:27

+0

嘿JPro,如果你認爲我的帖子是答案,請標記它。 謝謝 – 2010-01-28 20:22:56

+0

祝福布賴恩!我非常喜歡你的答案。 – 2010-01-29 14:50:53

0

這聽起來像你缺乏一點信心。這些是開發人員每天都面臨的問題。我認爲你認識到一個可能的弱點並正在採取措施來改進是很好的。花一些時間來了解更多關於數據庫和查詢的知識。

那說讓我直接回答大家的一些問題:

現在,如果有,可以 可能需要更長的時間 exection任何要求,可以開發滿足 ,打破了這一請求請求 ?

  • 是的,你可以分解請求。 並非每個請求都可以在 中滿足單個查詢。

我需要告訴他這是爲什麼 打破必要嗎?

  • 只有當他問。只要你符合要求,你應該沒問題。如果他知道如何做到這一點,那麼他爲什麼聘用你?

如果他覺得我不是在單杆做這件事的能力 ?

  • 再次,如果他知道一個更好的辦法 編寫數據庫和報表然後 他爲什麼要錄用你?

是每一份報告,他詢問需要 是在單個查詢?或將有 任何需要藉助PHP 處理一個循環,並根據我得到的 值,我把一些 條件應用規則, 客戶端要?

  • 不,不是一切都可以在一個單一 查詢來完成,這取決於報告的 複雜性。
+0

你在分析我的時候是正確的 – JPro 2010-01-28 18:11:52

+0

如果遇到嚴重的問題,我很抱歉。我想我們在某個時候都處於你的位置。:)我認爲這個領域長壽的關鍵是不斷學習。 18年後,我幾乎每天都會學到新的東西!當你開始對某個特定主題有那種不確定的感覺時,這是做一些研究的好標誌。信心會隨着經驗而來。 – DMKing 2010-01-28 19:54:21

0

關係數據庫的設計將會對可以做什麼(以有效的方式)或不可以做什麼產生巨大的影響。我傾向於說它是你的應用程序中最關鍵的部分。
您繪製表格設計的過程是可以的。但在此之後,您應該查看不同的使用案例,並查看(僅使用鉛筆和紙張)數據庫設計是否能夠應對每個案例。
然後,您可以與您的客戶討論,以確保一些案件永遠不會發生。 (例如:「你能確認一個產品總是屬於1個,只有1個類別」)。

也就是說,客戶確實可以在規格中提出任何要求。你可以自由接受,拒絕或向他解釋爲什麼他的規格是不現實的。如果你開發一個沒有明確規格的固定價格,那麼你處於一個糟糕的境地,這是你的錯......