2014-10-08 27 views
0

我想使用它的數據對現有數據庫進行規範化,因爲在許多表中有一個(外部)鍵用於引用外部實體(第三方系統)。因爲我們現在需要直接在數據庫中將其作爲一個實體,所以我在問我如何做到這一點。正常化數據庫及其現有數據的步驟

我更新了該數據庫的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

那麼首先使它成爲一個實體不需要您更改密鑰。新表的自然鍵是OldKeyThatWasJustAVarchar,因此您可以簡單地將其用作主鍵。那麼你所要做的就是在已經存在的引用上創建外鍵。

如果你想與你的ID理念堅持,雖然,那麼不要忘記對自然鍵唯一約束(OldKeyThatWasJustAVarchar即是)。至於進程:您可以簡單地在現有表中創建新表和NewForeignKeyToNewTable列。使這些列可以爲空。創建外鍵。然後填寫新表,然後填寫NewForeignKeyToNewTable列。然後讓你的新列不可空。而已。

+0

我要創建一個新的,因爲舊VARCHAR處理不是「通用」。 OK,只是用「不爲空」之後是簡單的提示。那很簡單。這裏有很多樹...... ;-) thx – Sammy 2014-10-08 12:56:29