阿里規範不建議多表Join,可這SQL要怎麼寫?

2022-02-15 04:02:57 字數 1260 閱讀 1670

阿里開發手冊的描述,禁止多表join:

手冊上寫著【強制】,相信很多同學專案裡面的**都不滿足這個要求。

但是關鍵問題是:不用join,這sql究竟要怎麼寫?!

分解關聯查詢

即對每個要關聯的表進行單錶查詢,然後將結果在應用程式中進行關聯。下面的這個查詢:

select * from tag 

join tag_post on tag_post.tag_id=tag.id

join post on tag_post.post_id=post.id

where tag.tag = 'mysql';

可以分解成下面這些查詢來代替:

select * from tag where tag = 'mysql';

select * from tag_post where tag_id = 1234;

select * from post where post.id in (123,456,567,9098,8904);

但是該方案也會有很明顯的問題,就是in後面的引數可能會過多,可見這個方案的通用性其實非常有限。

打破正規化標準

建議建表的時候,就把這些列放在乙個表裡,比如一開始有student(id, name),class(id, description),student_class(student_id, class_id)三張表,這樣是符合資料庫正規化的(第一正規化,第二正規化,第三正規化,bc正規化等),沒有任何冗餘,但是馬上就不符合「程式設計規範「了,那我們可以用一張大表代替它,student_class_full(student_id, class_id, name, description),這樣name和description可能要被儲存多份,但是由於不需要join了,查詢的效能就可以提高很多了。

任何的規範都是在特定情況下的某種妥協,脫離了這個環境,就不一定成立了。

需要說明的是,這種脫離正規化的設計,是網際網路業務在設計高並發表時慣用的做法!

具體問題具體分析

最後,建議具體問題具體分析,即使多表join在阿里規範是強制不允許的,但比如在管理後台這類併發量很低的業務場景下,依然是可以進行多表join操作的!

多表join並不一定是很low的做法,在錯誤場景下多表join才是很low的做法!

RESTFUL規範建議

restful概述 restful是目前最流行的一種網際網路軟體架構,是程式和程式之間進行資料互動需要遵循的規範。它結構清晰 符合標準 易於理解 擴充套件方便,所以正得到越來越多 的採用。rest是representational state transfer的縮寫,是roy thomas fiel...

阿里開發規範

1.強制 使用工具類 arrays aslist 把陣列轉換成集合時,不能使用其修改集合相關的方 法,它的 add remove clear 方法會丟擲 unsupportedoperationexception 異常。說明 aslist 的返回物件是乙個 arrays 內部類,並沒有實現集合的修改...

開發體系規範建議

為減少開發過程複雜混亂的環境配置,避免影響開發心情,建議形成良好的習慣,將少本地環境應用程式安裝數量。開發電腦 windows 1 開發電腦配置16以上記憶體。2 開發電腦安裝windows 10 最新版本。3 開發電腦啟用hyper v,並安裝docker desktop。4 使用docker啟動...