淺析數(shù)據(jù)完整性問題
發(fā)表時間:2024-06-10 來源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]---- 在 開 發(fā)C/S 結(jié) 構(gòu) 的 大 型 數(shù) 據(jù) 庫 應(yīng) 用 軟 件 時, 一 般 情 況 下, 軟 件 開 發(fā) 人 員 和 數(shù) 據(jù) 庫 設(shè) 計 人 員 并 不 是 同 一 個 人, 這 就 需 要 協(xié) 商 好 一 些 即 可 由 程 序 設(shè) 計 人 員 解 決 又 可 由 數(shù) 據(jù) 庫 設(shè) ...
---- 在 開 發(fā)C/S 結(jié) 構(gòu) 的 大 型 數(shù) 據(jù) 庫 應(yīng) 用 軟 件 時, 一 般 情 況
下, 軟 件 開 發(fā) 人 員 和 數(shù) 據(jù) 庫 設(shè) 計 人 員 并 不 是 同 一 個
人, 這 就 需 要 協(xié) 商 好 一 些 即 可 由 程 序 設(shè) 計 人 員 解 決 又
可 由 數(shù) 據(jù) 庫 設(shè) 計 人 員 來 解 決 的 問 題, 保 證 數(shù) 據(jù) 完 整 性
就 是 一 個 這 樣 的 問 題。
---- 筆 者 舉 一 個 最 簡 單 的 例 子: 貨 物 出 庫、 退 貨 的 例 子
---- 這 里 有 庫 存 表(kcb)、 出 庫 單 表(ckb) 和 退 貨 單 表(thb)
---- 庫 存 表 包 含 如 下 列:WPBH,KCSL〔 物 品 編 號, 庫 存 數(shù)
量〕
---- 出 庫 單 表 含 如 下 列:WPBH,CKSL〔 物 品 編 號, 出 庫 數(shù)
量〕
---- 退 貨 單 表 含 如 下 列:WPBH,THSL〔 物 品 編 號, 退 貨 數(shù)
量〕
---- 假 如 我 們 進 行 了 如 下 交 易:
---- 1 . 物 品A 有 十 件 出 庫
---- 2 . 物 品A 有 五 件 退 貨( 可 再 出 庫)
---- 我 們 都 知 道, 這 兩 筆 交 易 都 需 要 修 改 庫 存 表, 但 修
改 庫 存 表 的 工 作 由 誰 來 做。 可 以 肯 定 的 說, 程 序 設(shè) 計
人 員 和 數(shù) 據(jù) 庫 設(shè) 計 人 員 都 可 以 完 成。
---- 首 先 我 們 舉 例 由 程 序 設(shè) 計 人 員 如 何 完 成:
---- 1 . 出 庫 時, 產(chǎn) 生 新 出 庫 記 錄 插 入 到 出 庫 單 表 中,
同 時 將 庫 存 表 中 的KCSL 用KCSL 減 掉 出 庫 數(shù) 量 的 值 取 代。
---- 2 . 退 貨 時, 產(chǎn) 生 新 退 貨 記 錄 插 入 到 退 貨 表 中, 同
時 將 庫 存 表 中 的KCSL 用KCSL 加 上 退 貨 數(shù) 量 的 值 取 代。
---- 由 于 不 同 的 開 發(fā) 平 臺, 完 成 這 項 工 作 的 代 碼 不 盡
相 同, 故 不 寫 出 具 體 代 碼。
---- 接 下 來 看 看 由 數(shù) 據(jù) 庫 設(shè) 計 人 員 是 如 何 完 成 這 項 工
作:
---- 數(shù) 據(jù) 庫 設(shè) 計 人 員 完 成 這 項 工 作 靠 的 是 觸 發(fā) 器。
---- 數(shù) 據(jù) 庫 設(shè) 計 人 員 建 立 如 下SQL 語 句 為 出 庫 單 表(ckb) 建
立 插 入 觸 發(fā) 器
CREATE TRIGGER FORINSERT
ON ckb
FOR INSERT
AS
UPDATE kcb
SET kcb.kcsl=kcb.kcsl - inserted.cksl
FROM inserted
WHERE kcb.wpbh=inserted.wpbh
---- 同 樣, 也 要 為 退 貨 單 表 建 立 類 似 的SQL 語 句
CREATE TRIGGER FORINSERT
ON thb
FOR INSERT
AS
UPDATE kcb
SET kcb.kcsl=kcb.kcsl + inserted.thsl
FROM inserted
WHERE kcb.wpbh=inserted.wpbh
---- 可 以 很 明 顯 地 看 出, 如 果 兩 個 人 都 做 了 工 作, 程 序
在 運 行 過 程 中 一 定 會 出 錯。
---- 但 這 項 工 作 具 體 應(yīng) 該 由 誰 來 完 成 ? 我 私 下 認 為,
應(yīng) 該 由 數(shù) 據(jù) 庫 設(shè) 計 人 員 來 完 成, 原 因 如 下:
---- 1、 一 個 可 移 植 性 好 的 軟 件 應(yīng) 該 與 數(shù) 據(jù) 的 結(jié) 構(gòu) 無
關(guān);
---- 2、 程 序 的 研 制 和 調(diào) 試 更 加 簡 單, 再 拿 上 例 來 說, 程
序 設(shè) 計 人 員 只 需 完 成 往 出 庫 單 表 和 退 貨 單 表 中 插 入
相 應(yīng) 的 記 錄 工 作 即 可, 具 體 修 改 工 作 由 觸 發(fā) 器 來 完
成。
---- 3、 觸 發(fā) 器 的 運 行 是 在 服 務(wù) 器 端, 減 輕 了 客 戶 端 的
開 銷。
---- 4、 觸 發(fā) 器 不 管 你 在 什 么 時 候 進 行 操 作, 它 都 會 啟
動, 保 證 數(shù) 據(jù) 不 會 出 錯。
---- 其 實, 上 文 所 寫 的 觸 發(fā) 器 只 是 一 個 最 簡 單 的 例 子,
在 實 際 工 作 中 要 遠 遠 比 這 復(fù) 雜 得 多, 設(shè) 計 一 個 好 的 數(shù)
據(jù) 庫 會 花 費 數(shù) 據(jù) 庫 設(shè) 計 人 員 很 大 的 心 血, 如 果 只 是 建
立 了 表 格, 工 作 還 沒 有 完 成 一 半 呢, 下 一 多 半 工 作 就
是 將 你 的 數(shù) 據(jù) 完 整 性 問 題 解 決 掉。
---- 成 功 地 設(shè) 計 一 個 數(shù) 據(jù) 庫 能 起 到 事 半 功 倍 的 效 果。
數(shù) 據(jù) 的 完 整 性 已 經(jīng) 解 決 了, 程 序 設(shè) 計 起 來 還 有 什 么 問
題 呢 ?
---- 說 來 容 易, 做 到 卻 很 難, 比 者 在 實 際 工 作 中 也 經(jīng) 常
遇 到 很 多 問 題, 希 望 能 和 眾 多 的 同 行 共 同 進 步, 把 你
的 經(jīng) 驗 和 好 的 方 法 告 訴 大 家。
(出處:熱點網(wǎng)絡(luò))