Godna polecenia kownencja w złączeniach
Ja wiem, że programistyczny świat coraz bardziej zagarniany jest przez różnego rodzaju ORM-y i – co za tym idzie – czysty SQL jest używany coraz rzadziej. Może jednak właśnie z tego powodu warto poruszać związane z nim tematy, aby ci którzy doraźnie lub incydentalnie w nim programują trzymali się jednak pewnych zasad i konwencji. W tym wpisie chciałbym jedną z takich konwencji przybliżyć i tym samym być może zachęcić osoby, które mają do czynienia z SQL-em do jej stosowania. Wspomniana konwencja w jakimś sensie samoistnie wykrystalizowała mi się w toku mojej kariery programistycznej, będąc niejako konsekwencją pewnego naturalnego porządku w instrukcjach SQL. Dotąd stosowałem ją na swój użytek, ale pomyślałem, że gdyby rozpatrzyć ją obiektywnie, jest w jakimś sensie uniwersalna. Możliwe więc, że inni też na nią wpadli i stosują.
Konwencja dotyczy porządku, w jakim należy umieszczać kolumny w warunku (on …) konstrukcji złączenia (join …) i zaleca, aby po lewej stronie przyporządkowania (przed znakiem „równa się”) umieszczana była kolumna należąca do tabeli, do której następuje złączenie (czyli jest to tabela wymieniona po słowie kluczowym join), zaś po prawej stronie przyporządkowania (po znaku „równa się”) kolumna tabeli z której następuje złączenie (zazwyczaj umieszczona w zapytaniu wcześniej). Jeśli warunek złączenia obejmuje więcej niż jedną kolumnę, wówczas kolejne pary kolumn powinny być umieszczane w warunku w analogiczny sposób. Oto przykład:
select U.Name as UserName, TI.Text as GroupName from User U inner join Collection C on C.Link = U.id inner join Text TI on TI.Id = C.ElementNameId inner join Text TC on TC.Id = C.CollectionNameId where TC.Text = 'Grupy Użytkowników';
Korzyści ze stosowania tej konwencji to przede wszystkich szybkie ustalenie, które kolumny tabeli dołączanej biorą udział w złączeniu. Są to bowiem kolumny występujące tuż po nazwie tabeli. Nie trzeba zwracać uwagi na aliasy, bo konwencja jasno specyfikuje, że ta kolumna przed „równa się” jest właśnie z dołączonej tabeli. Jedyne aliasy, na które trzeba zwracać uwagę, to te po drugiej stronie znaku równości. Ale tu także zawsze wiadomo, że są to kolumny z innej tabeli.