database added

This commit is contained in:
magdo
2026-02-08 00:51:17 +01:00
parent 863f76934c
commit 6afdef6a30
10 changed files with 1736 additions and 0 deletions
+118
View File
@@ -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}