外鍵保障參考完整性,但命名混亂(如系統產生的 SYS_C001234)會讓錯誤訊息無法快速定位父/子表。建立統一命名規範並批次修正,是維運效率的關鍵。
FK_子表簡稱_父表簡稱(長度 ≤ 30 字元)
FK_ORD_ITEM_ORDER 代表 ORDER_ITEM 參考 ORDER。SET PAGES 0 LINES 200 TRIMS ON FEED OFF
SPOOL fk_report.lst
SELECT RPAD(c_child.table_name,25) child_table,
RPAD(cc.column_name,17) child_col,
RPAD(c_parent.table_name,25) parent_table,
RPAD(pc.column_name,15) parent_col,
RPAD(c_child.constraint_name,25) constraint_name
FROM user_constraints c_child,
user_constraints c_parent,
user_cons_columns cc,
user_cons_columns pc
WHERE c_child.constraint_type = 'R'
AND c_child.r_constraint_name = c_parent.constraint_name
AND c_child.constraint_name = cc.constraint_name
AND c_parent.constraint_name = pc.constraint_name
AND cc.position = pc.position
ORDER BY c_child.table_name, c_child.constraint_name;
SPOOL OFF
SELECT 'ALTER TABLE ' || c_child.table_name ||
' DROP CONSTRAINT ' || c_child.constraint_name || ';'
FROM user_constraints c_child
WHERE c_child.constraint_type = 'R';
再依命名規則產生 ALTER TABLE ... ADD CONSTRAINT FK_... FOREIGN KEY (...) REFERENCES ...。
USER_CONSTRAINTS 確認新名稱生效。規範命名不是潔癖,而是將「除錯定位時間」從分鐘級壓縮到秒級的低成本高報酬投資。