我想用其数据规范化现有数据库,因为在许多表上有一个(外部)密钥来引用外部实体(第三方系统)。由于我们现在需要将该实体直接作为实体存储在我们的数据库中,因此我要问我,如何做到这一点。
我更新了该数据库的DDL并创建了一个更新脚本(用于DDL) 但我最好的方法是迁移数据吗?
所有使用旧varchar-key的表现在都有一个不可为空的外键到该新实体。如何初始化此新字段。这是更新DDL之后的步骤(这对于非空字段是否可行?)?或者这样做而迁移DDL(以及如何)?
示例:
Table NewEntity
+ Key (autogenerated)
+ SomeInfo
+ OldKeyThatWasJustAVarchar
Table Existing_1
- Key (autogenerated)
- SomeInfo_1
- SomeInfo_n
- OldKeyThatWasJustAVarchar ('logical' Reference)
+ NewForeignKeyToNewTable
Table Existing_2
- Key (autogenerated)
- ExampleFieldAnalogOtherTables
- OldKeyThatWasJustAVarchar ('logical' Reference)
+ NewForeignKeyToNewTable
所有OldKeyThatWasJustAVarchar
的内容都是unice,所以一个简单的SQL会为我提供所需的NewEntity ID:
SELECT Key FROM NewEntity nw, Existing_n existing
WHERE nw.OldKeyThatWasJustAVarChar = existing.OldKeyThatWasJustAVarChar;
答案 0 :(得分:1)
首先,让它成为一个实体并不需要你更改密钥。新表的自然键是OldKeyThatWasJustAVarchar,因此您只需将其用作主键即可。然后,你所要做的就是在现有的引用上创建外键。
如果你想坚持你的ID概念,那么不要忘记对自然键(OldKeyThatWasJustAVarchar)有一个独特的约束。关于流程:您只需在现有表中创建新表和NewForeignKeyToNewTable列。使这些列可以为空。创建外键。然后填充新表,然后填充NewForeignKeyToNewTable列。然后让你的新列不可为空。那就是它。