我想解釋一個連接表給同事的好處,下面是一個解釋。我對麼?連接表的好處?
目前,他有一個圖片和標籤與兩個表之間的關係。圖片表和標籤表。圖表有一個tag_id
這是FK到標籤表中的條目。這是我的迴應:
首先讓我們看看pics
和tags
表。因此,在您當前的體系結構中,可以想象兩張圖片(a & b)。我們用標籤#wtf標記圖片& b。現在,我們在出tags
表兩個條目:
pic_id title
------ -----
a wtf
b wtf
你看到的問題?所以想象一下,在1000張不同的照片上有1000個wtf標籤。有了這個相同的體系結構,我們現在有一個包含所有這些重複數據(和浪費的空間)的臃腫標籤表。當我們有多對多的關係時會出現這個問題。在這種情況下,許多照片可以有很多標籤,許多標籤可以有很多照片。我們如何解決這個問題?答案是一個連接表。所以我們創建一個新表格。我們稱之爲pic_tag
。該表格將具有列pic_id
& tag_id
。所以現在新表將如下所示:
pic_tag
pic_id tag_id
------ ------
a 1
b 1
標籤
id name
-- ----
1 wtf
PIC
id name
-- ----
a pic1
b pic2
所以這做了幾件事情對我們來說。首先它節省了空間。我們只存儲一次字符串'wtf'。其次,要找到所有帶有'wtf'標籤的圖片,我們首先訪問標籤表並找到'wtf'的標識,然後轉到pic_tag表並搜索該標識,這樣可以更有效地搜索臃腫的標籤'給定文本的表格。換言之,搜索整數比搜索文本要快得多。
沒有數據複製,數據的完整性是優點,性能較低是一個騙局。 –
@ AD.Net:「性能下降」 - 這只是錯誤的。你不能說你的數據規範化會使得*東西*變慢,這是因爲沒有抽象*性能*度量,而是不同性能方面的數量,對於給定的結構可能*好得多* – zerkms