1 回答

TA貢獻(xiàn)2011條經(jīng)驗(yàn) 獲得超2個(gè)贊
也許我錯(cuò)過(guò)了一些東西,但據(jù)我了解,這diff
并不是萬(wàn)能的工具,可以免除您的任何責(zé)任。
在某些情況下,您必須自己編寫變更集,我認(rèn)為這就是其中之一。
既然它diff
確實(shí)是一個(gè)非常強(qiáng)大的命令,它也有它的缺點(diǎn)。
理論上,差異工具還可以檢查數(shù)據(jù)庫(kù)之間的新數(shù)據(jù)、更新數(shù)據(jù)和丟失數(shù)據(jù),但實(shí)際上這不起作用,原因有兩個(gè):
表現(xiàn)。隨著數(shù)據(jù)集的增長(zhǎng),要比較的信息量也會(huì)不斷增加,直至無(wú)法管理。
更改數(shù)據(jù)。在開發(fā)過(guò)程中,測(cè)試數(shù)據(jù)通常會(huì)添加到開發(fā)數(shù)據(jù)庫(kù)中,而這些數(shù)據(jù)不應(yīng)復(fù)制到其他數(shù)據(jù)庫(kù)中。此外,新數(shù)據(jù)可能會(huì)添加到測(cè)試和生產(chǎn)數(shù)據(jù)庫(kù)中,但不應(yīng)僅僅因?yàn)殚_發(fā)數(shù)據(jù)庫(kù)中不存在這些數(shù)據(jù)而將其刪除。
對(duì)于你的情況,我會(huì)做這樣的事情:
創(chuàng)建一個(gè)新表
phone
添加欄目
person.phone_id
將數(shù)據(jù)從 復(fù)制
person.phone_number
到phone.phone_number
將數(shù)據(jù)從 復(fù)制
phone.id
到person.phone_id
person
在和之間創(chuàng)建外鍵約束phone
降低
person.phone_number
代碼可能是這樣的:
<createTable tableName="phone">
? ? <column name="id" autoIncrement="true" type="bigserial">
? ? ? ? <constraints primaryKey="true" primaryKeyName="pk_phone"/>
? ? </column>
? ? <column name="phone_number" type="varchar(30)"/>
? ? <column name="brand" type="varchar(255)"/>
</createTable>
<addColumn tableName="person">
? ? <column name="phone_id" type="bigserial"/>
</addColumn>
<update tableName="phone">
? ? <column name="phone_number" valueComputed="(select p.phone_nubmer from person p)"/>
</update>
<comment>Assuming that person.phone_number is unique</comment>
<update tableName="person">
? ? <column name="phone_id" valueComputed="(select p.id from person p where p.phone_number = phone_number)"/>
</update>
<addForeignKeyConstraint baseTableName="person" baseColumnNames="phone_id"
? ? constraintName="person_phone_id_phone_id_fk"
? ? referencedTableName="phone" referencedColumnNames="id"/>
<dropColumn tableName="person" columnName="phone_number"/>
添加回答
舉報(bào)