database added
This commit is contained in:
@@ -0,0 +1,118 @@
|
||||
\section{ORM}
|
||||
|
||||
\begin{frame}{Mi az ORM?}
|
||||
\begin{block}{Object-Relational Mapping}
|
||||
\begin{itemize}
|
||||
\item Objektumok és relációs táblák közötti leképezés
|
||||
\item Osztályok \textrightarrow{} táblákat, objektumok \textrightarrow{} sorokat jelentenek
|
||||
\item Átfedő absztrakció az SQL felett
|
||||
\end{itemize}
|
||||
\end{block}
|
||||
|
||||
\begin{exampleblock}{Példa}
|
||||
\begin{itemize}
|
||||
\item \texttt{User} osztály \textrightarrow{} \texttt{users} tábla
|
||||
\item \texttt{user.email} mezők \textrightarrow{} \texttt{email} oszlop
|
||||
\end{itemize}
|
||||
\end{exampleblock}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}{Miért használunk ORM-et?}
|
||||
\begin{itemize}
|
||||
\item Kevesebb boilerplate SQL, gyorsabb fejlesztés
|
||||
\item Típusbiztonság, IDE támogatás, egységes API
|
||||
\item Adatbázis-portabilitás (pl. PostgreSQL \textrightarrow{} MySQL)
|
||||
\item Biztonság: paraméterizált lekérdezések alapból
|
||||
\end{itemize}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}{Korlátai és kockázatai}
|
||||
\begin{itemize}
|
||||
\item Teljesítmény: rosszul írt lekérdezések, N+1 probléma
|
||||
\item "Leaky abstraction": komplex SQL-t nehéz elrejteni
|
||||
\item Nem minden adatbázis funkció elérhető el könnyen
|
||||
\item Extra tanulási görbe és konfiguráció
|
||||
\end{itemize}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}{Alap fogalmak}
|
||||
\begin{columns}
|
||||
\begin{column}{0.48\textwidth}
|
||||
\begin{block}{Entity}
|
||||
Egy tábla sorát leíró objektum.
|
||||
\end{block}
|
||||
|
||||
\begin{block}{Repository}
|
||||
Adathozzáférési réteget kapszuláz.
|
||||
\end{block}
|
||||
\end{column}
|
||||
\begin{column}{0.48\textwidth}
|
||||
\begin{block}{Unit of Work}
|
||||
Változások követése és egyben mentése.
|
||||
\end{block}
|
||||
|
||||
\begin{block}{Session/Context}
|
||||
Kapcsolat az adatbázissal, cache és tranzakciók.
|
||||
\end{block}
|
||||
\end{column}
|
||||
\end{columns}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}{Kapcsolatok leképezése}
|
||||
\begin{itemize}
|
||||
\item One-to-One: \texttt{User} \textrightarrow{} \texttt{Profile}
|
||||
\item One-to-Many: \texttt{Author} \textrightarrow{} \texttt{Post[]}
|
||||
\item Many-to-Many: \texttt{Student} \textrightarrow{} \texttt{Course[]}
|
||||
\end{itemize}
|
||||
|
||||
\begin{block}{Felelősség}
|
||||
A helyes kulcsok, indexek és megszorítások ugyanúgy fontosak, mint ORM nélkül.
|
||||
\end{block}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}[fragile]{SQL vs ORM lekérdezés}
|
||||
\begin{columns}
|
||||
\begin{column}{0.48\textwidth}
|
||||
\begin{block}{SQL}
|
||||
\begin{lstlisting}[language=SQL]
|
||||
SELECT id, name, email
|
||||
FROM users
|
||||
WHERE active = true
|
||||
ORDER BY name ASC;
|
||||
\end{lstlisting}
|
||||
\end{block}
|
||||
\end{column}
|
||||
\begin{column}{0.48\textwidth}
|
||||
\begin{block}{ORM (példa)}
|
||||
\begin{lstlisting}[language=Java]
|
||||
List<User> users = db.users()
|
||||
.where(u -> u.active == true)
|
||||
.orderBy(u -> u.name)
|
||||
.select("id", "name", "email")
|
||||
.toList();
|
||||
\end{lstlisting}
|
||||
\end{block}
|
||||
\end{column}
|
||||
\end{columns}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}{Lazy vs Eager betöltés}
|
||||
\begin{block}{Lazy loading}
|
||||
Csak akkor tölt be kapcsolt adatokat, amikor elérjük őket.
|
||||
\end{block}
|
||||
\begin{block}{Eager loading}
|
||||
Előre betölt kapcsolatokat egy lekérdezéssel (JOIN).
|
||||
\end{block}
|
||||
\begin{alertblock}{N+1 probléma}
|
||||
Túl sok lekérdezés keletkezik, ha minden kapcsolt adat külön jön le.
|
||||
\end{alertblock}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}{Jó gyakorlatok}
|
||||
\begin{itemize}
|
||||
\item Használj migrációkat a séma kezelésére
|
||||
\item Mérj teljesítményt és ne félj nyers SQL-t írni
|
||||
\item Állíts be indexeket a gyakori szűrésekhez
|
||||
\item Tranzakciókkal biztosítsd a konzisztenciát
|
||||
\end{itemize}
|
||||
\end{frame}
|
||||
Reference in New Issue
Block a user