2013-02-15 74 views
4

我一直在閱讀,我應該把它存儲在一個單獨的表格中,「每行一個值」。這是什麼意思?像這樣 - 這樣每個「收藏」獲得另一個用戶條目?我應該如何將用戶「收藏夾」存儲在mySQL表中?

USER_ID  SKU_Favorited 

001   10016 
001   10067 
024   10016 
001   10010 
024   16779 

似乎多餘的必須進入同一個用戶兩次,但這是我應該做的?然後在查找我只是SELECT SKU WHERE用戶ID ...並找到該號碼旁邊的所有SKU?

+0

你會怎麼做呢? – 2013-02-15 20:33:53

+2

這被稱爲ManyToMany關係和正常實踐。你沒有多餘的用戶,因爲所有的用戶數據都在用戶表中,而不是收藏表 – 2013-02-15 20:35:41

回答

4

它被稱爲關係數據庫,它是三維標準形式

你有一個用戶表。

//users 
id | username | password 

而且隨着收藏表

//favorites 
id | userid | Favorited 

這裏你如何得到它:

select * from favorites inner join users on favorites.userid=users.id where users.id=1

+0

因此,對於每個喜愛的sku,都會有一個新條目,對嗎?所以Skus和用戶ID將在整個表中重複出現? – frankie 2013-02-15 20:42:18

+0

據我介紹,收藏夾表不應該有一個ID。 (userid,Favorited)必須是主鍵。 – gd1 2013-02-15 20:42:56

+0

@frankie:好的,一個條目中的相同userid和相同sku應該是唯一的。除此之外,這是正確的。 – Andrew 2013-02-15 20:43:10

0

是的,這正是你如何做到的。我不認爲它是多餘的。

2

relational model中沒有其他簡單的方法可以做到這一點,因爲用戶和收藏夾具有多對多的關係。

您的方法遵循常規做法。只需確保USER_IDSKU_Favorited將主鍵(在一起)。

東西我偶爾看到,但它是一個反模式,你應該永遠,是「串行化」的「收藏夾」的一面,即把用戶ID的一列,在另一個類似「1001,4514,41154,4411」的東西。
這看起來更「簡潔」,但是非常不明智,因爲1)第二列不得不使用VARCHAR字段,2)反向查找困難,3)您無法更改收藏夾的ID。

+0

我不會說**「從不」**(儘管這*是應該教的方法),而是「從不」*,後面有幾顆星星 - 考慮SO的標籤系統;-)無論如何,如果完成了非規範化,應該在仔細和慎重的思考之前進行。 – 2013-02-15 20:44:50

相關問題