我正在升级数据库架构。一张桌子分成2张桌子。这两个表是链接的,链接它们的唯一方法是使用原始表中的 varchar 名称字段。
问题是客户可能有重复的名称,因为名称不是主键/唯一键。
我来到这里寻找使这些名称独一无二的想法,以便在将数据移动到两个新的链接表时可以用作键。
在我写这篇文章时,我想到了将当前的 PK 连接到名称(如在 CONCAT(name,id) as newName 中)并将其用作键。
还有一个唯一的代码字段,但这仅适用于其中一个新表。
示例架构:
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 是另一个保持不变的第四个表中的 FK。进行上述更改后,c_id 现在将成为第四个表中的有效 FK。
我的挑战: 如何插入这些新表但仍保持原始名称<->代码<->a_id 关系并将tableA.a_id 值传输到newTableC.c_id。不在乎 b_id 是否获得新的 auto_incr。价值观。
不确定我遇到的问题有多清楚,但请随时提出任何问题。
谢谢丹