對於MySQL數據庫我有兩個類似的表:如何規範化MySQL數據庫表
1.st表 track_tag(2萬行)
ID(INT),track_id(INT)標籤(VARCHAR)
2.nd表 標籤(150.000行)
ID(INT),標籤(VARCHAR)
我想標準化第一個表標記列與第二個表的主鍵。 解決這個問題的最快方法是什麼?
對於MySQL數據庫我有兩個類似的表:如何規範化MySQL數據庫表
1.st表 track_tag(2萬行)
ID(INT),track_id(INT)標籤(VARCHAR)
2.nd表 標籤(150.000行)
ID(INT),標籤(VARCHAR)
我想標準化第一個表標記列與第二個表的主鍵。 解決這個問題的最快方法是什麼?
假設你不在生產工作DB(因此之類的長時間運行的查詢和刪除/重新創建表是OK) - 那麼我認爲最快的方法是使用Create Table AS SELECT statement。
例如:
CREATE TABLE track_tag_V2 AS SELECT track.id AS id, track.track_id, tag.id AS tag_id
FROM track_tag track, tag
WHERE track.tag = tag.tag
;
然後(假設結構是根據自己的喜好),只需DROP track_tag
然後RENAME track_tag_V2 to track_tag
就大功告成了!
然而,這不得(和可能將沒有)的中BEST方式。如果您的數據庫已經過去歸一化,可能已經出於性能原因(歸一化優化了存儲,而不是性能)。它也可能需要重新設計(這是而不是快)。
你的標籤表是罰款爲列:ID(INT),標籤(VARCHAR)
注:假設id字段是在這裏就可以了主鍵其他明智的創建索引。
但變化track_tag表按如下─
ID(INT),track_id(INT),TAG_ID(INT)
注:TAG_ID場應該在這裏建立索引。
也不清楚什麼是track_id字段在這裏。
每個'track_id'是否對應一個唯一的'tag'?如果是這樣,那麼只需從'track_tag'中移除'tag'列。 –
最快的方法是什麼?設計?兩秒鐘。實際執行和移動數據?更長的時間。 – Coderchu