在this introductory tutorial對JDBC和關係數據庫,它是說,爲什麼在關係數據庫中不允許重複行?
完整性規則
關係表中遵循一定的完整性規則,以確保它們包含 數據留準確,始終可以訪問。首先,關係表中的 行應該都是不同的。 如果有 重複的行,可能會出現問題,解決兩個可能的 選擇中的哪一個是正確的。
但是,如果行重複,則意味着兩個行中的所有字段都保持相同的值;當它們完全相同(重複)時,一個問題是正確的而另一個問題是不正確的? 行重複如何損害數據完整性?
在this introductory tutorial對JDBC和關係數據庫,它是說,爲什麼在關係數據庫中不允許重複行?
完整性規則
關係表中遵循一定的完整性規則,以確保它們包含 數據留準確,始終可以訪問。首先,關係表中的 行應該都是不同的。 如果有 重複的行,可能會出現問題,解決兩個可能的 選擇中的哪一個是正確的。
但是,如果行重複,則意味着兩個行中的所有字段都保持相同的值;當它們完全相同(重複)時,一個問題是正確的而另一個問題是不正確的? 行重複如何損害數據完整性?
主要的原因可能是:空間維護重複記錄這沒有任何意義
因此,如果您沒有定義明確識別人的方法,那麼您如何說賬戶X屬於哪個人。
這是一種哲學問題。但我認爲你可能會投入太多。我會說這個問題真的是「數據庫如何知道哪一行是正確的」。在我設置的第一個系統之一中,我弄亂了密鑰並設法在表中獲得重複的行。然後問題是如何告訴數據庫哪些行擺脫(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;
然後我不會有任何可能性將正確的數據放入數據庫系統。
數據完整性,人們不得不問的問題是爲什麼兩個相同的記錄被允許在一個表中,爲了什麼目的。
你怎麼知道你在談論哪個記錄?例如,讓我們以相同的雙胞胎爲例,他們可能以各種方式匹配,但他們的名字,這樣我們可以確定我們正在與誰談話。
行的重複會破壞數據完整性,因爲它違反了由RDBMS設置的創建規則。
如果發生重複,您將無法關聯特定的一組數據,這是RDBMS的陳述目標,如您的問題所述。
從技術上講,您可以使用相同數據的多行,但需要注意的是,您必須包含一個區分行的主鍵。
希望這是有道理的,並幫助
當你必須改變行的值之一,哪一行更改?爲什麼你的表中有重複的行?重複代表什麼? –
在學習數據庫(比如電子商務商店)中,迂迴複製是一個糟糕的主意,但在數據倉庫中可以使用關係數據庫。 –