星期五, 9月 25, 2015

[SQL] Foreign Key 重要性

最近 [設備加工零件 Table] 三不五時會出現 Block,檢查 T-SQL 語法時,發現該段語法 Highlight 很奇怪
SELECT 
    .......................
FROM 派工單 AS s
    JOIN 派工單物料
    LEFT JOIN
        (            
            SELECT 
                Q.物料識別碼
            FROM 物料排版圖數量 AS Q
                JOIN 物料排版圖 AS M ON Q.物料排版圖數量ID = M.物料排版圖數量ID
                JOIN 排版圖 AS SP ON SP.排版圖圖號 = M.排版圖圖號
                JOIN 排版圖設備加工零件 AS GP ON GP.排版圖圖號 = SP.排版圖圖號
                JOIN 設備加工零件 AS GG ON GP.設備加工零件號碼 = GG.設備加工零件號碼
            WHERE Q.稽核 = 0
            GROUP BY Q.物料識別碼
        ) AS QQQ ON QQQ.物料識別碼 = w.物料識別碼
WHERE 
    .......................
ORDER BY
    .......................

詢問同事撰寫邏輯後才發現,原來是擔心 [物料排版圖]、[排版圖]、[排版圖設備加工零件] 和 [設備加工零件] 資料對應不起來,自動派工會出現問題,才乾脆把相關 Table 通通 JOIN 起來,聽完後直覺是,這不是 Foreign Key(以下簡稱 FK)該作的事情嘛。

檢查相關 Table 後才發現,[排版圖設備加工零件] 對應 [設備加工零件] 還真的沒有設定 FK,詳細了解原因後,才發現給現場操作員資料,會包含一些不需要 [設備加工零件]  的輔助資訊,兩者放在同一個 Table 內,所以才不能建立 FK,再檢查 [設備加工零件]  相關 Table 才發現,因為 [排版圖設備加工零件] 出錯,所以連帶 [物料排版圖數量] 相關資訊也掛掉不少。

多建立一個 Table 並修改程式來儲存輔助資訊,並把 [排版圖設備加工零件] 和 [設備加工零件] 的 FK 建立起來,避免再次發生悲劇,Orz

沒有留言:

張貼留言