2012-09-15 125 views
1

我有一個表在MySQL:數據標準化在MySQL

user_item_text 
    username, item, text 

我希望將數據歸到三個表:

users 
    user_id, username 

items 
    item_id, item_name 

text 
    text_id, text_name 

如何使用現有的user_item_text表中創建三個表格描述如何?大約有800000條記錄。

回答

2

這裏是如何處理一代表 「用戶」 的例子:

create table users(
    user_id int not null auto_increment, 
    username varchar(50), 
    primary key(user_id), 
    index ind_user_username(username) 
) engine = XXX; 

insert into users(username) select distinct username from user_item_text 

alter table user_item_text add user_id integer null 

update user_item_text uit join users u on uit.username = u.username 
set uit.user_id = u.user_id 

alter table user_item_text drop column username 

也許你會在運行最後一次之前需要添加以下步驟:

  1. 上字段中添加索引進行更新的運行速度
  2. users.username唯一索引,而不是普通的指數
  3. user_item_index.user_id應該有FK

希望它能幫助。

ps。我沒有測試查詢。他們只是向你展示一般方法。