1

私はmysqlにテーブルを持っています:

user_item_text
    username, item, text

データを3つのテーブルに正規化したい:

users
    user_id, username

items
    item_id, item_name

text
    text_id, text_name

user_item_text説明されているように、既存のテーブルを使用して3つのテーブルを作成するにはどうすればよいですか?約800000レコードがあります。

4

2 に答える 2

2

1つのテーブル「user」を処理する方法の例を次に示します。

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

最後を実行する前に、次の手順を追加する必要があるかもしれませんupdate

  1. フィールドにインデックスを追加user_item_text.usernameして、更新の実行を高速化します
  2. users.username通常のインデックスの代わりに一意のインデックス
  3. user_item_index.user_idFKが必要です

それが役に立てば幸い。

ps。私はクエリをテストしませんでした。彼らはあなたに一般的なアプローチを示しているだけです。

于 2012-09-15T08:00:42.390 に答える
1

テーブルを作成してから、selectと組み合わせて挿入を使用します。私の知る限り、挿入にテーブルを使用することは可能です。

例:ユーザーと主キーは自動インクリメントです

    Insert into users (username) Select username from user_item_text

http://dev.mysql.com/doc/refman/5.1/de/insert-select.html

于 2012-09-15T07:49:41.457 に答える