2016-02-04 202 views
-1

對於MySQL數據庫我有兩個類似的表:如何規範化MySQL數據庫表

1.st表 track_tag(2萬行)

ID(INT),track_id(INT)標籤(VARCHAR)

2.nd表 標籤(150.000行)

ID(INT),標籤(VARCHAR)

我想標準化第一個表標記列與第二個表的主鍵。 解決這個問題的最快方法是什麼?

+0

每個'track_id'是否對應一個唯一的'tag'?如果是這樣,那麼只需從'track_tag'中移除'tag'列。 –

+0

最快的方法是什麼?設計?兩秒鐘。實際執行和移動數據?更長的時間。 – Coderchu

回答

1

假設你在生產工作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方式。如果您的數據庫已經過去歸一化,可能已經出於性能原因(歸一化優化了存儲,而不是性能)。它也可能需要重新設計(這是而不是快)。

0

你的標籤表是罰款爲列:ID(INT),標籤(VARCHAR)

注:假設id字段是在這裏就可以了主鍵其他明智的創建索引。

但變化track_tag表按如下─

ID(INT),track_id(INT),TAG_ID(INT)

注:TAG_ID場應該在這裏建立索引。

也不清楚什麼是track_id字段在這裏。