重複群組是在整個資料庫資料表中一系列重複的欄位或屬性。這是大小型公司都面臨的普遍問題並可能會產生多種後果。例如,在不同地方存在的同一組資訊會導致資料冗餘和資料不一致。此外,所有這些重複資料會佔用大量寶貴的磁碟空間,並需要很長時間進行搜尋。重複群組的問題在小型公司中是可以解決的,但是對於必須管理大量資訊的大型公司,重複公司組會成為一場噩夢。
在今天的文章中,我們將學習如何在設計資料庫時和在現有資料庫中識別重複群組,以及如何修正它們。由於重複群組是一種會影響任何關聯式資料庫,因此我們將使用 Navicat Premium 作為我們的資料庫開發工具。
重複群組的例子
Sakila 範例資料庫 含有與虛構的影片出租商店有關的許多資料庫實體。儘管其資料表已正規化為第三正規化(3NF),但出於本教學的目的,我們將 film 資料表加入有關每部電影中出現的演員的資料。這是該資料表中的樣本列:
你可以看到每個演員都在資!表中加入了額外的一列。更糟糕的是,演員的名字每次出現時都會重複出現。問題在於演員是與電影分離的獨立實體。 因此,需要移走他們。
修正重複群組
嚴格來講,即使重複群組沒有違反第一正規化(1NF),將資料從非正規(UNF)轉換為 1NF 的過程也會消除重複群組。以下是執行此操作的步驟:
- 識別資料的重複群組。
- 將重複的群組欄位刪除並移至新資料表中,並保留主索引鍵以及剩餘的資料表。
- 原本的主索引鍵現在將不再是唯一的,因此使用原本的主索引鍵作為複合索引鍵的一部分為該關係分配新的主索引鍵。
由於我們已經確定了重複群組,因此我們要重新設計資料表,以省略重複的群組欄位並為其建立自己的資料表。
Navicat Premium 帶有內建的資料模型工具。它可以幫助你以視覺化方式設計高質量的概念、邏輯和物理資料模型。在那裡,你可以從模型產生資料庫結構。 資料模型工具也可以逆向工作,從現有資料庫執行逆向工程。其他功能包括從 ODBC 資料來源匯入,產生複雜的 SQL 或 DDL 以及將模型列印至檔案。
這是顯示現有 films_and_actors 資料表的模型:
為了將演員與電影分開,我們需要加入一個新資料表來儲存演員屬性。我們還應該給它一個 ID PK 欄位,該欄位將連結至原本的資料表中的相同(新 FK)欄位。
你還需要重新命名資料表以反映 films 資料表僅包含電影,而 actors 資料表僅儲存演員資訊。
將電影資料表和演員資料表連結
如何將表連結在一起取決於它們之間的特定關係。在這種情況下,一部電影可能有零個或多個演員,而演員可能出現在一個或多個電影中。這樣的多對多關聯性將需要一個中介資料表來將電影和演員連結。它僅包含電影 ID 和演員 ID。這是 Navicat 模型工具中完整的模型:
總結
在今天的文章中,我們學習了如何使用 Navicat Premium 的強大資料模型工具在設計資料庫時和在現有資料庫中識別重複群組,以及如何修正它們。Navicat Premium 加入了 100 多項增強功能,包括幾個全新的功能,可為你提供比以往更多建置、管理和維護資料庫的方法!