Co to znaczy dobra znajomość SQL / Baz danych?

0

Gdy widzicie że ktoś ma w CV wpisane

"dobra znajomość SQL / Baz danych"

czy jak tam wolicie w gwiazdkach: ⭐⭐⭐ z ⭐⭐⭐⭐⭐, gdzie (1=amator, 5=expert)

to jakie macie oczekiwania od takiej osoby? oczywiście w kontekście programisty, a nie dba.

PS:

tak mnie naszło, a może zbyt duża biegłość w bazach to wada przy programowaniu, bo później więcej próbuje się zrobić po stronie bazy? no wiecie widoki, procedurki, triggerki. temp tables itd. bo "po stronie bazy szybciej" ;)

9

1) Potrafi napisać zapytania, w których używa joinów, group by, having, sub selectów, itp.
2) Wie co to jest widok i potrafi go stworzyć - to jest zwykłe zapytanie, więc jak umie punkt 1), to z tym też se powinien poradzić, nawet jeśli wcześniej nie tworzył widoków.
3) Wie jak optymalizować zapytania - np. użycie indexów.
4) Stosuje postaci normalne, nie wymagałbym tu żeby pamiętał regułkę czym dokładnie jest postać I, II i III, po prostu gość powinien wiedzieć o co w nich chodzi.
5) Triggerów i procedur bym nie wymagał, to nie jest jakoś często stosowane.
6) Wie co to SQL injection i jak się bronić przed tym - np. parametryzacja zapytań po stronie kodu.
7) Zna jakiś framework do pracy z bazami, np. Doctrine w PHP.
8) Umie rozróżnić bazy relacyjne od nierelacyjnych, wie do czego służą. Potrafi podać jakieś przykłady.
9) Potrafi podać zalety/wady robienia niektórych rzeczy w kodzie zamiast bezpośrednio w bazie (chociaż to akurat może być już ponad standardową znajomość).

4

@serek: prawie wszystko, co wymieniłeś zaliczył bym raczej pod podstawową znajomość SQL, a nie dobrą ;) to że ktoś nie zafunduje SQLi na dzień dobry, bo wie że sklejanie zapytań na partyzanta to proszenie się o kłopoty nie czyni jeszcze mocnym zawodnikiem :D

Dobra znajomość dla mnie oznaczałaby coś szerszego, na przykład

  • Wiedza na temat tego, jak działają poszczególne typy indeksów, jak są budowane i z czym to się wiąże - z tą wiedzą agent będzie się orientował, który w danej sytuacji się nada zamiast zawsze zakładać domyślny
  • Jakieś pojęcie o tym, w jaki sposób DBMS / silnik który delikwent dobrze zna składuje dane, jakie ma ograniczenia itd
  • Orientowanie się w takich tematach jak migrowanie danych, kompatybilność wstecz / wprzód, powinien też wiedzieć jak działa i jakie ma konsekwencje partycjonowanie oraz replikacja bazy danych - nie po to, żeby z marszu wrzucał to do każdej bazy, ale żeby nie robił tego na pałę tylko uważał bo można zrobić sobie kuku
7

Jeśli dobra, to powinien jeszcze znać poziomy izolacji transakcji, zasady ich działania.

5

W praktyce to oznacza znajomość jakiegoś ORM-a :D

1
superdurszlak napisał(a):

@serek: prawie wszystko, co wymieniłeś zaliczył bym raczej pod podstawową znajomość SQL, a nie dobrą ;)

Czy ja wiem. Gdyby chodziło o dobrą znajomość baz gościa, który się głównie nimi zajmuje, to się zgodzę. Ale w temacie chodzi o dobrą znajomość w odniesieniu do programisty. Więc ja bym tu trochę lżej do tematu podchodził.

Dodatkowo bym dodał jeszcze np. używanie transakcji.

2

To zależy też czy z punktu widzenia programisty czy z punktu widzenia bazodanowca.

1

3/5 czy 5/5?

Poza tym sam SQL to raczej dość płytki temat, więc trzeba mówić o konkretnej technologii, zakładam że Oracle bo to raczej standard przy rekrutacjach.

3/5 to:

  • na pytanie co zrobi żeby poprawić zapytanie które z jakiegoś powodu długo się wykonuje bezwzględnie odpowiada "sprawdzę plan zapytania" a nie że użyje indeksów (żeby pisać zapytanie bez koniecznych indeksów trzeba być idiotą, pytanie co zrobić jak indeksy już tam są)
  • najlepiej żeby znał PL/SQL przynajmniej zgrubnie i umiał napisać prosty skrypt
  • wie co to jest trigger
  • potrafi opisać poziomy izolacji i efekty typu phantom reads
  • wie jak sprawdzić co lockuje daną tabelę
  • potrafi poprawnie dobrać typ danych do kolumny
  • używa WITH ;p

4/5 - 5/5 to:

  • zna bardzo dobrze PL/SQL, potrafi w nim napisać dowolne przetwarzanie danych i integracje z technologiami typu Java
  • potrafi optymalizować zapytania hintami
  • potrafi skutecznie partycjonować tabele
  • potrafi korzystać z klienta konsolowego i przenieśc danem db dumpem
  • potrafi zaproponować optymalizację bazy na poziomie administracyjnym

Uwaga to nie są skille na administratora czy developera stricte Oraclowego, tylko na developera Javy który używa Oracla.

Sama znajomość zapytań SQL to jest dla mnie 1/5, to powinien znać każdy QA a nie developer.

0

Większość firm jednak nie ma DBA, więc taka odpowiedzialność spada na programistów, no i jak ktoś jest stricte backend developerem i ma pracować z SQLem i odpowiadać za jego zarządzanie, no to strach osoby bez takiej wiedzy zatrudniać.

1

@urke u mnie w ex firmie byl ziom od sql :D a i tak appka zdychala bo baza do kosza. Podobno jak odchodzielm jakeigos DBA zatrudniali ale kto wie czy cos poprawil. Ogolnie ja jak developer nienawidze baz danych traktuje je jako zlo konieczne. I jako fullstack niestety i po sql musialem grzebac. Dobrze jest jak mialem podobne zapytanie pisane to na luzie dawlaem rade napisac swoje wzorujac sie :P. Nigdy sie w tym mocny nie czulem i nie przedam za SQL. Jak firma zydzi na DBA to jej sprawa a pozniej jej to sie czkawka odbije jak aplikacja przestanie odpowiadac i tylko zwiekszenie timeoutow pomoze.

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0