2010-02-10 30 views
4

是否有任何工具或在線資源(FREX教程),可以幫助新手與數據庫規範化?工具或網站,以幫助數據庫正常化

+1

標準化不應該需要一個工具。 – 2010-02-10 05:14:37

+2

@Mitch小麥:爲什麼? – 2010-02-10 05:18:09

+0

@The Machine Charmer:因爲作爲數據庫設計師,您應該瞭解您在域中建模的內容。 – 2010-02-10 05:23:10

回答

7

An Introduction to Database Normalization

Wiki:Database normalization

Database Normalization Tips

實現設計良好的數據庫在關係數據庫設計理論, 規範化規則識別某些 屬性必須是一個精心設計的數據庫存在或不存在 。 有一些規則 可以幫你實現了完善的數據庫 設計:

  • 的表應該有一個標識符。設計原理的基本規則是每個表 應該有一個唯一的行標識符,一個 列或一組列用於 區分表中每隔一個記錄的任何單個記錄。每個 表應該有一個ID列,並且沒有 兩個記錄可以共享相同的ID 值。提供 作爲 表的唯一行標識符的一列或多列是 表的主鍵。在AdventureWorks數據庫中,每個表包含 作爲主鍵列。例如,對於 示例,VendorID是Purchasing.Vendor表的 的主鍵。

  • 一張表應該只存儲單一類型實體的數據。試圖以 在表中存儲太多的信息 可能會阻礙表中數據的高效可靠的管理。 在AdventureWorks示例數據庫中,銷售訂單和客戶 信息存儲在單獨的 表中。雖然您可以在 列中包含 銷售訂單和 單一表中的客戶的信息,但此設計會導致出現幾個問題 。客戶 的信息,名稱和地址必須是 爲每個 銷售訂單添加並冗餘存儲。這會在數據庫中使用額外的 存儲空間。如果 客戶地址發生更改,則必須爲每個銷售訂單更改 。 另外,如果 客戶的最後銷售訂單已從 Sales.SalesOrderHeader表中刪除,則該客戶的信息將丟失。

  • 表應該[儘量]避免可空列。表格可以定義列 以允許空值。 A 空值表示沒有 值。雖然 允許在隔離的 個案中允許空值,但您應該謹慎使用它們。 這是因爲它們需要特殊的 處理,這增加了數據操作的複雜性 。如果您有一個 表,其中有幾個可爲空的列 ,並且列中的某些行的值爲空值 ,您應該考慮將這些列放入 表中鏈接到主表 的另一個表中。通過將數據存儲在兩個 分開的表中,主表可以在設計上簡單並且仍然處理 偶爾需要存儲這個 信息。

  • 表不應該有重複值或列。數據庫中 項目的表格不應包含 特定信息的值列表。例如,對於 示例, AdventureWorks數據庫中的產品可能是從多個供應商處購買的 。如果 在供應商名稱 的 Production.Product表中存在一列,則會產生問題。 一個解決方案是將 所有供應商的名稱存儲在列中。但是,這使得難以顯示各個供應商的列表 。另外 的解決辦法是改變 表的結構,爲 添加另一列爲第二個廠商的名字。 但是,這隻允許兩個供應商。此外,如果一本書有三個 供應商,則必須添加另一列 。如果您發現有 存儲值的列表,在一個單一的 列,或者如果你有多個 列單件的數據, 如TelephoneNumber1和 TelephoneNumber2,你應該考慮 把重複數據在另一個 表中有一個鏈接回主表 表。 AdventureWorks數據庫具有 產品 的Production.Product表,供應商信息的採購。供應商表 ,以及第三個 表Purchasing.ProductVendor。此 第三張表僅存儲產品的ID值 和產品的供應商的 的ID。此設計 允許任意數量的供應商使用 產品,而無需修改表格的 定義,也無需 爲單個供應商分配 產品的未使用存儲空間。

Ref

2

最好的解決方案是,你應該能夠完全理解如何規範化表單,你需要多長時間依賴任何工具來爲你做這件事?我建議你到study a bit about it,這樣你就可以自己想出最好的解決方案。作爲一名開發人員,你會不時面對這個問題,接受採訪怎麼樣,讓我們​​假設你被問到了哪裏?而作爲米奇小麥說,標準化不應該要求一個工具:)

這裏有一些更多的資源,讓你盯着:

http://dev.mysql.com/tech-resources/articles/intro-to-normalization.html

來源:MySQL的網站(官方)

2

作爲初學者,我使用Relational Database Design

相信我的好! (因爲它起作用並且不需要先決條件,對於初學者來說是理想的)。第4頁介紹了規範化。

+0

oops我的錯誤! – 2010-02-10 05:25:12

4

我使用NORMA進行概念數據庫設計。其中一個副作用是它爲適當規範化的數據庫生成模式。

+1

+1 ...並以簡單的英文捕捉關係,基數等,非技術人員可以理解。 – gbn 2010-02-10 06:23:15

+0

我不認爲有一個與Open Office兼容的版本? – aslum 2010-02-10 06:52:50

+1

@aslum:以什麼方式兼容? NORMA是一個Visual Studio擴展。源代碼在SourceForge上可用 - 如果您需要某種特殊的輸出格式,可以自定義它。特別是,如果Open Office使用XML格式,我知道輸出是由XSLT驅動的。 – 2010-02-10 10:14:27

5

你不應該使用工具的想法只是沒有思想的意識形態。數學家使用計算器,儘管他們可以自己完成所有的計算。諾瑪很好,我會從那開始的。

0

1:不要聽任何人誰告訴你,因爲歸人誰做這樣的評論的確不需要工具不瞭解問題。

2:「正常形式」最好被視爲衡量數據庫設計質量的指標。例如,處於較高正常形式的數據模式具有較少的數據冗餘,不易更新異常 - 這意味着您的應用程序需要較少的程序代碼。

3:所以,如果規範化是必不可少的,那麼最好的辦法是什麼?

大約有這麼多的敘述,所以我將只提及兩個:

方法1:功能分解(FD) 現在是至少有一個著名的大學教授教FD方法的情況下。看到這個視頻:「Stanford University Video on functional decomposition」。 不幸的是,(和對不起珍妮弗),但功能分解非常複雜,容易出錯,在我看來,完全不可行。 (例如,您如何首先計算出正確的「Mega」關係?)

方法2:使用NORMA工具自動生成第五範式模式。 諾瑪工具免費和其上運行的免費版本的Visual Studio 2013的 您可以瞭解更多關於它的my website.

快樂建模。

PS我已經使用了20年以上的對象角色建模方法。