2014-10-08 3 views
0

외부 엔터티 (타사 시스템)를 참조하는 데 여러 테이블에 하나의 (외부) 키가 있기 때문에 해당 데이터로 기존 데이터베이스를 정규화하고 싶습니다. 이제는 데이터베이스에 직접 엔티티로 사용할 필 요가 있으므로 필자는이 작업을 수행하는 방법을 묻습니다.데이터베이스와 기존 데이터를 정규화하는 단계

해당 데이터베이스에 대한 DDL을 업데이트하고 DDL에 대한 업데이트 스크립트도 생성했습니다.
하지만 데이터를 마이그레이션하는 가장 좋은 방법은 무엇입니까?

이전 varchar-key를 사용하는 모든 테이블에는 이제 새 엔터티에 대한 Null 허용 외래 키가 없습니다. 이 새로운 필드를 어떻게 초기화합니까? DDL을 업데이트 한 후이 단계가 입니까? (null이 아닌 필드의 경우 가능합니까?)? 또는이 작업을 수행하려면 을 입력하고 DDL을 마이그레이션하는 방법은 무엇입니까?

예 : 모든 OldKeyThatWasJustAVarchar

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 

내용은 그래서 간단한 SQL이 나에게 NewEntity의 필요한 ID 제공하는 것이, UNICE 있습니다

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

답변

1

모두 잘 처음 만드는 그것에게 엔티티는 키를 변경하도록 요구하지 않습니다. 새 테이블의 자연 키는 OldKeyThatWasJustAVarchar이므로이 키를 기본 키로 간단하게 사용할 수 있습니다. 그렇다면 이미 존재하는 참조에 외래 키를 만드는 것입니다.

ID 개념을 고수하고 싶다면 자연 키 (OldKeyThatWasJustAVarchar 즉)에 고유 한 제약 조건을 지정하는 것을 잊지 마십시오. 프로세스와 관련하여 : 기존 테이블에 새 테이블과 NewForeignKeyToNewTable 열을 간단하게 만들 수 있습니다. 이 열을 null로 만들 수 있습니다. 외래 키를 만듭니다. 그런 다음 새 테이블을 채우고 NewForeignKeyToNewTable 열을 채 웁니다. 그런 다음 새 열을 nullable로 만들지 마십시오. 그게 전부 야.

+0

이전 varchars가 '일반'이 아니기 때문에 새 항목을 만들어야합니다. OK, 나중에 'not null'을 사용하는 것이 간단한 힌트였습니다. 너무 쉬웠다. 여기에 나무가 많이 ... ;-) thx – Sammy

관련 문제