2016-01-29 1759 views
1

this introductory tutorial對JDBC和關係數據庫,它是說,爲什麼在關係數據庫中不允許重複行?

完整性規則

關係表中遵循一定的完整性規則,以確保它們包含 數據留準確,始終可以訪問。首先,關係表中的 行應該都是不同的。 如果有 重複的行,可能會出現問題,解決兩個可能的 選擇中的哪一個是正確的。

但是,如果行重複,則意味着兩個行中的所有字段都保持相同的值;當它們完全相同(重複)時,一個問題是正確的而另一個問題是不正確的? 行重複如何損害數據完整性?

+3

當你必須改變行的值之一,哪一行更改?爲什麼你的表中有重複的行?重複代表什麼? –

+1

在學習數據庫(比如電子商務商店)中,迂迴複製是一個糟糕的主意,但在數據倉庫中可以使用關係數據庫。 –

回答

1

主要的原因可能是:空間維護重複記錄這沒有任何意義

  1. 浪費。
  2. 當您在應用程序中選擇數據時,不必要的內存空間(主內存)浪費。
  3. 規範化約束:如果你的表有重複的記錄,那麼它根本就不是一個規範化的表。
  4. 如果單個人存在2條記錄,那麼它確實令人困惑,因爲可能有另外一個客戶具有相同的姓名,地址等。例如:銀行客戶。

因此,如果您沒有定義明確識別人的方法,那麼您如何說賬戶X屬於哪個人。

1

這是一種哲學問題。但我認爲你可能會投入太多。我會說這個問題真的是「數據庫如何知道哪一行是正確的」。在我設置的第一個系統之一中,我弄亂了密鑰並設法在表中獲得重複的行。然後問題是如何告訴數據庫哪些行擺脫(20年前,使用postgres 5.x我認爲)。它本身並不損害數據的完整性,但它會損害「準確且始終可用」,因爲無法僅提取所需的一行。

一個例子:如果有人讓一個人表所示

create table person(
    name varchar not null, 
    dateofbirth date not null, 
    town varchar not null); 

很明顯,你會得到重複記錄遲早的事。我知道生活在奧斯陸的第一個約翰史密斯31.08.67是我的老同學,而住在奧斯陸的第二個約翰史密斯31.08.67是我一週前第一次見到的同事。但我無法在數據庫中彼此告知他們,我無法單獨處理它們。所以,如果我後來做

alter table person add connection; 

然後我不會有任何可能性將正確的數據放入數據庫系統。

1

數據完整性,人們不得不問的問題是爲什麼兩個相同的記錄被允許在一個表中,爲了什麼目的。

你怎麼知道你在談論哪個記錄?例如,讓我們以相同的雙胞胎爲例,他們可能以各種方式匹配,但他們的名字,這樣我們可以確定我們正在與誰談話。

行的重複會破壞數據完整性,因爲它違反了由RDBMS設置的創建規則。

如果發生重複,您將無法關聯特定的一組數據,這是RDBMS的陳述目標,如您的問題所述。

從技術上講,您可以使用相同數據的多行,但需要注意的是,您必須包含一個區分行的主鍵。

希望這是有道理的,並幫助

相關問題