2012-09-07 121 views
2

因此,我正在開發一個PHP + MySQL系統,它有大約4個相關表。一張表中的任何形式的插入,更新和刪除通常會反映至少兩個表格。觸發器或PHP腳本?

我的問題是,什麼是更有效的,使用觸發器或額外的PHP腳本(這觸發SQL查詢)照顧所需的相關更改?

觸發器對我來說似乎很理想,但是當我寫它們時,從可讀性的角度來看它們變得非常複雜和凌亂。 PHP允許一種更「理性」的做事方式。

請建議兩者的基礎上,性能以及易用性/日後修改等

回答

3

我強烈建議你構建你的數據庫來照顧自己。

它被稱爲去耦。

然後,即使您的(或其他人)腳本中存在數據受到保護的錯誤。對於大多數(所有?)業務而言,這是最重要的資產。

此外,它使人們能夠使用其他機制來利用數據庫。即使是原始的命令行。

爲了使代碼更具可讀性,請格式化並使用註釋。

1
  • 觸發器,如果​​你想讓你的DBA是在代碼的控制。
  • PHP如果你想讓你的程序員控制代碼。

澄清:

如果它是一個觸發器,則其含義是,它是對事物工作方式的數據庫設計的一部分。即數據庫的結構依賴於它的工作方式。

如果是PHP代碼,則意味着該操作是業務邏輯的一部分,對於數據庫的核心結構不重要。

+0

嘛,我都在這裏唯一的DBA和程序員。還有什麼區別? –

+0

@RohanSood - 編輯澄清。 – SDC

+0

謝謝。這有幫助! –

1

事實上,數據庫觸發器會比PHP代碼更快。這取決於在更新其他數據之前需要「翻譯」源表中的數據的程度。你必須操縱它越多,你的SQL可能就越不可讀和可維護。因爲它也可能包含商業邏輯。

所以,恕我直言,如果你沒有性能問題,你最好保持它在PHP。

+1

爲什麼使用PHP?使用SQL會更好嗎? –

+0

@EdHeal性能說話,可能是的,但是當它保存在初始腳本中時通常會更具可讀性,無論如何,這通常需要進行數據庫調用 - 觸發器將數據操作分成兩個地方 - 可能會但也可能不方便你:) –

0

呦可以通過添加語法在MYSQL觸發...

CREATE 
    [DEFINER = { user | CURRENT_USER }] 
    TRIGGER trigger_name 
    trigger_time trigger_event 
    ON tbl_name FOR EACH ROW 
    [trigger_order] 
    trigger_body 

trigger_time: { BEFORE | AFTER } 

trigger_event: { INSERT | UPDATE | DELETE } 

trigger_order: { FOLLOWS | PRECEDES } other_trigger_name