我已經被賦予設計數據庫的任務來爲我們公司存儲大量信息。由於該任務相當大,並且包含多個模塊,用戶應該能夠完成這些任務,所以我很擔心爲此設計了一個好的數據模型。我只是不想結束設計糟糕的數據庫。查找示例的好地方數據庫設計 - 最佳實踐
我想有一些合同/結算/訂單等數據庫結構的體面的例子,以結合在一個很好的關係型數據庫中。有沒有可以幫助我解決這個問題的例子?
我已經被賦予設計數據庫的任務來爲我們公司存儲大量信息。由於該任務相當大,並且包含多個模塊,用戶應該能夠完成這些任務,所以我很擔心爲此設計了一個好的數據模型。我只是不想結束設計糟糕的數據庫。查找示例的好地方數據庫設計 - 最佳實踐
我想有一些合同/結算/訂單等數據庫結構的體面的例子,以結合在一個很好的關係型數據庫中。有沒有可以幫助我解決這個問題的例子?
在你開始閱讀規範化之前,直到你根本沒有任何問題。如果你只是在學校做過這些,你可能還沒有足夠的知識來設計它。
仔細收集每個模塊的要求。你需要知道:
業務規則(這是特定於應用程序,並且必須在礦井數據庫強制執行becasue他們必須在所有記錄中執行任何信號源),
是否有法律或監管問題(HIPAA例如或薩班斯 - 奧克斯利法案) 安全(確實的數據需要加密?)
做哪些數據需要存儲和爲什麼(可用其他地方這個數據)
哪些數據塊將只有一行數據,需要多行行
你打算如何強制每個表中的行的唯一性?你有自然鑰匙還是需要代理鑰匙(幾乎在所有情況下建議使用代理鑰匙)
你需要複製嗎?
您需要審覈嗎?
數據將如何輸入到數據庫中?它是來自應用程序一次記錄(或者甚至來自多個應用程序),還是其中一些來自ETL工具或另一個數據庫的批量插入。
你需要知道誰進入了記錄,當(極有可能,這將在企業制度是必要的。
將你需要什麼樣的查找表?數據輸入更爲精確的時候可以使用查找表和用戶限制值。
你需要什麼?
大約多少條記錄將系統有哪些?你需要有一個想法,知道有多大創建您的測試做什麼樣的數據驗證數據。
你打算如何查詢數據。你會使用存儲過程或ORM或動態查詢嗎?
在您的設計中需要記住一些非常基本的事情。爲您的數據選擇正確的數據類型。不要在字符串字段中存儲您打算進行數學計算的日期或數字。請將數學不適用的數字(零件號,郵政編碼,電話號碼等)存儲爲字符串數據,因爲您可能需要前導零。不要在一個字段中存儲多個信息。所以沒有逗號連接的列表(這些表明需要一個相關的表格),而當你發現自己正在做類似phone1,phone2,phone 3的事情時,馬上停下來設計一個相關的表格。爲了數據完整性的目的,請使用外鍵。
通過您的設計的所有方式考慮數據的完整性。沒有完整性的數據是毫無意義和無用的。爲了性能而設計,這在數據庫設計中至關重要,並不是過早的優化。數據庫不容易重構,所以重要的是首次正確地獲得性能方程中最關鍵的部分。事實上,所有數據庫都需要設計用於數據完整性,性能和安全性。
不要害怕有多個連接,正確索引這些將執行得很好。不要試圖將所有內容都放入實體值類型表中。儘量少用這些。試着學習從處理數據集的角度思考,這將有助於您的設計。數據庫經過優化,可以集中處理。
還有更多,但這足以開始消化。
數據模型資源手冊。
http://www.amazon.com/Data-Model-Resource-Book-Vol/dp/0471380237/ref=dp_cp_ob_b_title_0
重的東西,但非常好,通過了。總共3卷...
有很多非常好的通過泛型結構 - 但它們並不容易,因爲它們涵蓋了一切;)總是一個很好的起點,但。
請儘量將您的疑慮分開。能夠更新數據庫的用戶更多的是「應用程序設計」問題。如果你的數據庫設計正確,那麼它應該是爲它開發一個很好的前端。首先要看的是Normalization。這是從您的表中刪除任何冗餘數據的過程。這將有助於保持數據庫整潔,並且只存儲與您的需求相關的信息。
數據庫不應該是模型。它用於在工作會話之間保存信息。
您不應該在數據模型上構建應用程序,而應該在遵循業務邏輯的良好的面向對象模型上構建應用程序。
完成對象模型後,請考慮如何保存和加載它,以及與之相關的所有數據庫設計。
(但顯然你的公司只是要你設計一個數據庫?不是應用程序?)
巴里·威廉姆斯已經公佈了約六百數據模型庫的各種應用。幾乎可以肯定的是,它將爲您提供所有子系統的「十人首發」。進入這個圖書館是免費的,所以check it out。
聽起來這是你的組織想要的一個很大的「企業級」應用程序,而且你似乎有點像數據庫的初學者。如果可能的話,你應該從一個單一的子系統開始 - 比如訂單 - 並且讓它工作。不僅僅是數據庫表的構建,還有它的一些框架前端。一旦這足夠好,可以添加另一個相關的子系統,例如Billing。你不想結束一個龐大的怪物。
還要確保你有一個體面的數據建模工具。 SQL Power Architect對於免費工具來說已經足夠了。
這樣一個「大」的問題,但在你接受答案之前的這麼短的時間? – 2010-03-09 13:03:02