DB スキーマをアップグレードしています。テーブルは 2 つのテーブルに分割されます。これら 2 つのテーブルはリンクされており、それらをリンクする唯一の方法は、元のテーブルの varchar name フィールドを使用することです。
問題は、名前がプライマリ キーまたは一意のキーではないため、顧客の名前が重複している可能性があることです。
2 つの新しいリンクされたテーブルにデータを移動するときにキーとして使用できるように、これらの名前を一意にするアイデアを探してここに来ました。
これを書いているとき、現在の PK を CONCAT して名前を付け (CONCAT(name,id) as newName のように)、これをキーとして使用するという考えがありました。
一意のコード フィールドもありますが、これは新しいテーブルの 1 つにしか入りません。
スキーマの例:
tableA
a_id INT(11) PRI AUTO_INCREMENT
code VARCHAR(10) UNIQUE
name VARCHAR(30) NOT NULL
newTableB
b_id INT(11) PRI AUTO_INCREMENT
name VARCHAR(30)
newTableC
c_id INT(11) PRI AUTO_INCREMENT
b_id INT(11) FK->newTableB
code VARCHAR(10) UNIQUE
私が欲しいもの:
- 新しい b_id を生成 (auto_increment)
- tableA.name からインポートされた newTableB.name
- tableA.code からインポートされた newTableC.code
- tableA.a_id からインポートされた newTableC.c_id
a_id は、同じままである別の 4 番目のテーブルの FK です。上記の変更後、c_id はこの 4 番目のテーブルで有効な FK になります。
私の課題: これらの新しいテーブルに挿入し、元の名前<->コード<->a_id の関係を維持し、tableA.a_id の値を newTableC.c_id に転送するにはどうすればよいでしょうか。b_id が新しい auto_incr を取得してもかまいません。値。
私が問題をどの程度明確にしているかはわかりませんが、お気軽に質問してください。
ありがとうダン