2009-04-21 40 views
6

人們如何製作可用於許多產品的可重用數據庫?人們如何創建可重用的數據庫?

例如,如果我們有一個爲學校設計的數據庫......它可以很容易地修改爲給大學?

創建可用作產品的數據庫的方法是什麼?只需編寫一次就可以爲許多客戶提供解決方案?

謝謝

回答

0

像這樣的應用程序需要一個相當複雜的數據模型來說明需求。不同類型的學校會有不同的要求。大學可能會讓你增加或減少課程,但一所小學通常不會。大學需要將課程安排到房間中,而小學需要根據可用空間和教師將學生分爲不同的成績並將成績分爲課堂。

您的設計需要考慮所有需要解決的問題,然後實施這些需求。您越是通用的程序越難滿足您的客戶。問題說「寫一次代碼」。如果你想寫一個解決每個學校需求的單一程序,它將需要數百個功能;在某些情況下,一些學校會要求另一所學校的相反功能;例如有些學校需要爲每個學科或課堂強制執行一名教師,而另一所學校可能需要多名教師。您希望滿足的要求越多,應用程序就越複雜。

在行業中,大型應用程序傾向於書寫以便可以擴展;提供了一套核心功能,但應用程序旨在針對特定客戶進行更改和定製。這使得它更容易開發,因爲你不需要預見每一個需求;事實上,除非客戶滿足這些需求,否則您不需要預見許多需求。但是通過「定製」,你不會只編寫一次代碼。

最重要的一步是提出一個足夠靈活的數據模型,以便稍後擴展,但不夠靈活以至於無法開發。最難的部分通常是正確的關係的基數。例如,你可能會說一個班有一位老師。然後當一個班級需要兩位老師時,你必須重寫很多代碼並修復大量數據。這些變化煩人而且耗時。然而,最終你可以在給予足夠程序員時間的情況下解決錯誤。

2

有沒有這個簡單的銀子彈。你只需要保持足夠的數據庫設計,但儘量避免過度泛化,因爲這通常會導致維護和其他令人討厭的陷阱的噩夢。

憑藉豐富的經驗,您將開始體會到廣義和專業之間的完美平衡。這是可以理解和可重用的代碼/數據庫設計的關鍵。

+0

這可能是真的,如果應用程序在同一個域中,在這種情況下,應用程序就像每個產品一樣... – 2009-04-21 18:02:19

0

我能給的最好的建議是建立在最小公分母....

所以....代碼它作爲實現教育設施面向:-)

0

花時間思考一個項目關於您想要存儲的數據類型,將其抽象以使其可擴展,然後相應地構建數據庫。我不知道是否可以通過代碼完全重複使用,但如果您提前計劃,則可以構建可重用的數據庫結構(您仍然需要修改單個組件)。

1

答案是找到abstractionsweet spot

+0

lol @鏈接'甜蜜點' – mpen 2009-04-21 18:29:44

+0

對於可能會找到術語奇數的ESL民歌 – 2009-04-21 19:30:17

0

這取決於您的需求。例如,對於基於產品的業務很多很多的數據庫使用包括格式:

  • 客戶表
  • 訂單表
  • 的產品表等

在你的情況,你可能有

  • 一類表
  • 一個斯圖登TS表
  • 一個等級表等

這是一般的表格式可以在許多應用中重複使用。

0

這一切都在設計中。在許多情況下(如果不是大多數情況下),數據庫將需要一定程度的個別機構定製;但通用數據庫可以提供基本級別的功能。有可能設計出足以滿足許多基本需求的東西;但問題是設計的普遍性會導致高複雜性。例如,您可以將您的數據庫設計爲針對大量潛在用戶需求的數據驅動;但通常情況下,最好根據機構的個人需求定製架構。

在重複使用情況設計中涉及重大權衡;通常它們涉及時間和複雜性;即,設計不可重用的東西會更容易;通常,在進行總體設計和使用時花費的額外時間是不值得的。

0

在您的數據庫設計中尋找通用性和特異性的完美平衡點,以便您在其周圍構建的應用程序解決了您的目標市場中足夠的問題,以便他們全部購買。

3

通常,當人們這樣做時,他們在同一行業有多個客戶。因此,如果您是電子商務Web開發人員,那麼您將一遍又一遍地運行相同的產品,訂單和訂單詳細信息類型的表格場景。發生這種情況時,創建起動器數據庫是一件輕而易舉的事情。

0

每個客戶都會使用所有功能嗎?或者您是否在嘗試構建一種適合所有產品的產品?我總是發現,花在計劃和修改數據庫以適應特定應用程序上的額外時間在未來會有回報。使用簡潔的數據庫結構比嘗試考慮各種可能性的結構要容易得多。

如果我有一個相似的現有數據庫或模板,我通常會使用數據庫建模工具(如this)對其進行修改,然後使用生成SQL功能(在加載/保存下)創建實際數據庫。

最近我拿起的另一個技巧爲我節省了大量時間,它將用於生成數據庫的SQL保存爲腳本。如果我想建立一個新的數據庫,我對源代碼進行任何編輯,然後加載頁面。例如,如果我想生成新的客戶表,我加載http://localhost/load.php?generate=customer

希望它有幫助!

1

第一步,與各種各樣的潛在客戶交談,瞭解他們的需求,他們目前正在使用什麼以及他們希望他們現有產品能夠做什麼。如果您認爲您需要現在就花費10倍的時間。在紙上畫出一個潛在的圖形用戶界面,讓你面試的人看看圖紙並提出建議。如果可能的話,聘請業內一些人作爲業務分析師來幫助實現這一步驟。詢問法律要求。一些行業有很多合法的問題,其他行業則沒有。任何與醫療領域相關的任何事情,例如,您都需要研究和完全理解HIPPA的要求。

設計數據庫結構和一個GUI,然後讓一些真正的用戶玩它。基於他們所說的重構(令人驚訝的是用戶在收集需求時忽略了多少東西,而他們在面對實際的GUI時卻沒有想到)。

想想所有潛在客戶需要共同點以及您可能需要定製的地方 - 您的採訪應該在這裏指導您。決定如何處理定製。或者即使你會允許它。這可能取決於這個行業的很多事情,以及他們的行爲標準如何。

如果這是盒裝軟件,通常設計中會包含一個帶有可定製字段的表格,這些字段可以添加到用戶的表格和報告中。

在基於Web的解決方案中,通常每個想要定製的用戶可能都有自己的數據庫,其中存儲了定製信息(以及用於不可定製事物的中央standrad數據庫),程序員根據來自客戶端的請求進行更改。如果你採取這種方式,第二次爲第二個客戶做一個simliar定製,考慮是否需要重構,以使這個軟件的新功能可供所有人使用。無需編寫17個自定義考勤報告,只有一個或兩個字段不同時,客戶可以花更少的錢購買標準報告。

在Web模型中,您還可以創建一堆模塊並讓客戶端選擇要添加到自定義解決方案中的模塊。他們會根據所選模塊的數量和複雜程度進行支付。因此,只需要三個標準報告的客戶將比想要所有27個客戶的客戶付出更少的代價。當建議新的定製時,如果該建議似乎不適用於其他人,則該客戶支付開發費用,但是該模塊這樣做是爲了讓其他人也可以購買它。如果其他人購買它,那麼要求更改的原始客戶可能會獲得部分資金,直到他們支付開發成本爲止。他們還可能要求某些東西仍然是一個定製模塊,併爲這項工作付出更高的代價。我們有一些客戶甚至不希望他們的數據位於與其他客戶位於同一位置的相同服務器上。毋庸置疑,我們收取鉅額費用來做這樣的事情。

定製是昂貴的,可能導致更多的程序員需要。在進入定製路線之前考慮非常強烈。它確實可以銷售您的軟件解決方案,但它不能很好地擴展。當你有十名知名人士時,這並不壞,但當你有幾百人時,它很快就會失控。一旦你提供它就很難退出定製,而不是稍後從標準套件中添加定製。通常,在組織企業報告時,更需要定製。如果您可以創建一個報告界面,人們可以選擇他們想要的信息並保存自己的自定義報告,那麼您可以處理行業中的大部分自定義需求,而無需進行全面的自定義。

相關問題