簡體   English   中英

替換為主鍵的其他表中的外鍵

[英]Replace primary key that is foreign key in other tables

我目前正在重建用於存儲患者記錄的數據庫。 在當前數據庫中,患者的主要關鍵字是他們的姓名和出生日期(單列,即“ John Smith 1970-01-01”,它不是組合)。 這也是許多其他表中用於引用“患者”表的外鍵。 我正計划用自動生成的整數密鑰替換此密鑰(因為在當前系統下,顯然有一天會有重復的密鑰)。 如何在此表中添加新的主鍵,並在所有其他表上添加適當的外鍵? 請記住,已經有大量數據(約500,000條記錄),並且這些數據引用不能被破壞。

謝謝!

如果由我決定..

  1. 使用auto_increment將新的future-PK列添加為非空唯一索引( 它必須是KEY,但不一定是PK )。

  2. 將適當的new-FK列添加到所有相關表中,這些列最初應為空。

    1. 根據current-PK / FK關系將new-FK值設置為適當的future-PK值。 在此步驟中使用“ UPDATE .. JOIN”

    2. 在相關表上啟用參照完整性約束(DRI) 它只需要是KEY / FK,而不是PK / FK,這就是可以使用future-PK的原因。 在此步驟中,可能應該更新所有使用current-PK的現有DRI約束。

    3. 根據建模要求,刪除new-FK列的可為空性。

    4. 刪除所有殘留的舊FK列,因為它們現在是冗余數據

  3. 切換舊的PK和新的/將來的PK( 這可以在一個命令中完成,並且可能需要一段時間才能物理地重組所有行)。 刪除舊的PK列(如果適用),或者簡單地刪除KEY狀態。

我還將在流程中使數據庫脫機檢查和測試流程(使用測試數據庫進行空運行),並維護備份

數據訪問層和任何視圖/等也將需要更新。 這些應該同時進行,再次通過審查和測試過程。

同樣,即使添加了自動增量PK,該表通常仍應具有適當的覆蓋范圍的自然鍵,並使用唯一約束來實施。

我使用以下方法解決了問題:

1-分配給患者表添加了新的主鍵,並為所有現有記錄分配了唯一值

2-為每個引用表創建物化視圖(無觸發器),其中包括引用表中的所有字段以及患者表中新創建的id字段(通過聯接)。

3-刪除源引用表

4-將實例化視圖重命名為原始源表的名稱

物化視圖現在是從屬表。

實例化視圖的參考: http : //www.fromdual.com/mysql-materialized-views

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM