在開發中,如果程式語言(例如PHP)和SQL(例如MySQL)都能實現某個功能,我們是用程式語言實現還是SQL?還是具體問題具體分析?

時間 2021-05-06 22:31:05

1樓:聶同學

常見的SQL,正規化不夠豐富,比如沒有OO的大部分特性,很難做到必要的邏輯結構,所以長期來看有一些困難,比如難以演進。

常見的資料庫邏輯,比如儲存過程,執行時是跟資料庫資源繫結的,很難靈活處置。

2樓:王瑞華

其實把邏輯放在程式裡邊也分三種情況.

第一種比較弱,用程式語言system呼叫命令列命令, 不推薦這樣做,都是不得已而為之的. 比如db2的load只有c的api,在python和perl裡都沒有實現load的模組,那只能用命令列了.

第二種是使用語言的資料庫模組去運算元據庫,本質上還是將計算放在了資料庫上. 只不過把邏輯封裝在了程式裡. 這種在效率上和儲存過程沒有區別, 但是因為儲存過程的特性肯定沒有語言強和多, 總的來說是要優於用儲存過程的.

第三種是將資料庫的資料拿出來使用語言在記憶體中處理. 這個計算壓力在跑程式的機器上. 並且只適合做小資料量的業務計算. 如果涉及到幾張很大的表,是沒法用這種的.

在開發流程上,使用程式肯定是要優於用儲存過程的. 程式的各種版本管理比儲存過程要成熟的多.

還有就是如果用的是c等編譯型語言,而某處邏輯又頻繁更改,確實也有把一部分放在儲存過程的情況.

3樓:孫召忠

我的原則是:能放在PHP中的全放到PHP中,DB( 如MySQL)只放資料,不放邏輯(外來鍵約束、儲存過程等)。

用MySQL,但記住用的哪個資料庫是可以隨時換的,所以尤其不要用MySQL自己支援的一些和邏輯有關的特性。

4樓:

舉個例子吧:

比如訪問量, 有tbl_hour中記錄了當天每小時每使用者的訪問次數, 如tbl_hour的表有三列: username, hour, visit_couter.

在每天凌晨1點, 要將前一天的每個使用者的訪問數加和, 生成前一天每個使用者的天訪問總數, 放如表tbl_day, 表有三列: username, dateName, visit_counter.

現在計算前一天的天訪問總數可使用程式來算, 也可使用sql來算:

1. 將所有前一天的資料取出來(SELECT * FROM tbl_hour WHERE hour betwen LAST_DAY_START AND LAST_DAY_END), 通過程式計算每個使用者的訪問數;

2. 將前一天的每使用者的訪問數直接通過SQL來計算(SELECT username,sum(visit_counter)FROM tbl_hour WHERE hour betwen LAST_DAY_START AND LAST_DAY_ENDGROUP BY username)

你會選擇哪種?

讓我選擇的話, 如果tbl_hour前一天的資料量特別大, 如百萬千萬或以上, 還是自己選擇計算吧;如果量級不是太大, 直接讓SQL計算, 會省事一些.

大家是怎麼選擇的呢? 聽聽大家的建議.

如果開發一門程式語言,它的各種新舊特性都是可插拔的,是不是可以增加它的生命力和時代適應力?

林一二 當一門語言的外掛程式在發展過程中被不斷地替換,直到幾乎所有語法外掛程式都換過一輪了,它還是原來的語言嗎?我現在在用 lijinke666 babel plugin array last index 外掛程式,如果未來還有人實現其他語法外掛程式 假設 babel parse 也提供 hook ...

在python的socket程式設計中,如果使用socket recv()接收資料,到下次接收的時候又是上次沒接收完的資訊,我怎麼才可以再次重新接收資料?

大峰子 最傻的辦法是客戶端輸入完所有資訊後直接斷開socket,然後伺服器端recv就停止阻塞並往下執行了 或者利用尾標識法,接受乙個整個資訊,比如 how are you exit 最後的 exit 是這整個資訊的尾標識。繼續完善的話,可以分別在伺服器與客戶端加入首席資訊官度的限制 路上乙隻汪 資...

如果要自製一門程式語言,那麼網路和gui部分該怎麼實現?

符合預期 程式語言本身和網路沒有關係。如果是想做一套視覺化的解決方案,你可以研究一下http iH5.cn 這個已經基本實現了你說的 程式語言自製網路 GUI 這些部分。據我所知這個框架是SaaS的,基於HTML5和JS來實現的,後台據說是MongoDB來做的。總體來說呢,我還是比較建議你盡量做成W...