规范化数据库及其现有数据的步骤

时间:2014-10-08 08:56:48

标签: sql database-migration ddl database-normalization

我想用其数据规范化现有数据库,因为在许多表上有一个(外部)密钥来引用外部实体(第三方系统)。由于我们现在需要将该实体直接作为实体存储在我们的数据库中,因此我要问我,如何做到这一点。

我更新了该数据库的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;

1 个答案:

答案 0 :(得分:1)

首先,让它成为一个实体并不需要你更改密钥。新表的自然键是OldKeyThatWasJustAVarchar,因此您只需将其用作主键即可。然后,你所要做的就是在现有的引用上创建外键。

如果你想坚持你的ID概念,那么不要忘记对自然键(OldKeyThatWasJustAVarchar)有一个独特的约束。关于流程:您只需在现有表中创建新表和NewForeignKeyToNewTable列。使这些列可以为空。创建外键。然后填充新表,然后填充NewForeignKeyToNewTable列。然后让你的新列不可为空。那就是它。