【问题标题】:Steps to normalize database and its existing data规范化数据库及其现有数据的步骤
【发布时间】:2014-12-02 21:02:32
【问题描述】:

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

我更新了该数据库的 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 的内容都很统一,所以一个简单的 SQL 就可以为我提供所需的 NewEntity 的 ID:

SELECT Key FROM NewEntity nw, Existing_n existing 
    WHERE nw.OldKeyThatWasJustAVarChar = existing.OldKeyThatWasJustAVarChar;

【问题讨论】:

    标签: sql database-migration ddl database-normalization


    【解决方案1】:

    首先让它成为一个实体不需要你改变键。新表的自然键是 OldKeyThatWasJustAVarchar,因此您可以简单地将其用作主键。那么你所要做的就是在已经存在的引用上创建外键。

    如果您想坚持自己的 ID 概念,请不要忘记对自然键(即 OldKeyThatWasJustAVarchar)设置唯一约束。至于过程:您可以简单地创建新表和现有表中的 NewForeignKeyToNewTable 列。使这些列可以为空。创建外键。然后填充新表,然后填充 NewForeignKeyToNewTable 列。然后使您的新列不可为空。就是这样。

    【讨论】:

    • 我必须创建一个新的,因为旧的 varchars 不是“通用的”。好的,稍后只使用'not null'是简单的提示。那太容易了。这里有很多树... ;-) thx
    猜你喜欢
    • 2011-04-05
    • 1970-01-01
    • 2018-01-27
    • 2013-11-10
    • 2012-05-30
    • 2012-10-08
    • 2012-06-21
    相关资源
    最近更新 更多