簡體   English   中英

在MySQL中存儲多對多關系的最佳方式?

[英]Best way to store a many-to-many relationship in MySQL?

假設我有一個包含表'posts'和'tags'的簡單數據庫。 帖子可以有很多標簽,標簽可以屬於很多帖子。

構建數據庫的最佳方法是什么? 我想過使用list / serialize:

tags
idx tag_id, str tag_name

posts
idx post_id, str title, list tag_ids

或者有另一個表與關聯。 問題是使用這個我甚至不知道如何構建查詢以在我收到帖子時提取相關的標簽名稱。

posts
idx post_id, str title

post_tags
fk post_id, fk tag_id

其實我不喜歡他們中的任何一個。 有沒有更好的辦法?

post_tags是在數據庫中實現多對多關系的正確方法。

我對你發布的內容的唯一補充是它中的兩列都應該是確保沒有重復的主鍵。

你幾乎肯定會想要使用“交集”或連接表。 此表可以包含posts和tags表的主鍵,以及(可選)其自己的不同主鍵。 加入這三個表應該很簡單:

select ...
from post_tags
inner join posts on post_tags.postID = posts.postID
inner join tags on post_tags.tagID = tags.tagID
...

您可以創建一個執行基本聯接的視圖,然后可以在代碼中引用該視圖。

使用帶關聯的表 - 這稱為聯結表

獲取帖子的標簽:

SELECT tag_name FROM tags, post_tags WHERE post_tags.tag_id = tags.tag_id AND post_tags.post_id = 12345;

使用連接表

我認為這是一個很好的解釋: http//www.tonymarston.net/php-mysql/many-to-many.html

否則你應該看看對象關系映射 - 它為你做復雜的SQL查詢。

例如: http//www.qcodo.com/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM