的MySQL架構和CRUD查詢讓我們想象一下,我有視頻,每個視頻可以有一些標籤(最高爲每10個視頻標籤)。的標籤系統
我計劃我的SQL模式,它看起來像這樣:
videos
:id
,title
,path
,tag_rels
:id
,tag_id
,item_id
(它將指向videos
id
。),tags
:id
,tag
;
好吧,對我來說很好。
然後我寫了SELECT
應該得到視頻,加上標籤。
SELECT `videos`.`id`, `videos`.`title`, `videos`.`path`, `tags`.`tag`
FROM `videos`
JOIN `tag_rels`
ON `tag_rels`.`item_id` = `videos`.`id`
JOIN `tags`
ON `tags`.`id` = `tag_rels`.`tag_id`
它沒有經過測試,因爲它都在心靈層面。
而大問題是INSERT
查詢(我猜)。
雖然我明白:
- 查詢#1:
videos
插入視頻。這將返回主鍵(videos
。id
),對不對? - 查詢#2:從數據庫中選擇標籤#1,並得到它的主鍵, #3
- 查詢:如果沒有這樣的記錄(基於標籤名(
tags
tag
),執行插入查詢和插入。它的目標是讓該標記的主鍵, - 查詢4:插入與
tag_rels
項視頻的PK和標籤的PK;
所以,這是每個視頻一個查詢,因爲它是,加上2或3查詢每個標籤。
這意味着如果視頻有10個標籤和(最壞的情況),那麼這些標籤中的任何一個都不會被保存在數據庫中,這將花費我1 + 10 * 3 ... em .... 31查詢?!
有必須是一個更好的辦法!非常感謝!
P.S.我不想在數據庫中出現重複條目,並且我希望列中有used_in
到tags
以及使用該標記的視頻數量。在未來...
你能給(new_video_id是Video.id你插入一條記錄到視頻後得到)我是一個例子嗎?我不知道程序是如何工作的 - 以前從未使用過。或者,至少有一些鏈接... – daGrevis
以下是文檔:http://dev.mysql.com/doc/refman/5.0/en/create-procedure.html –