A „Kotomarket” sémája
What you'll learn
- megtalálni a megfelelő táblát a „Kotomarket” öt táblája közül:
users,products,orders,order_items,events - olvasni egy ER-diagramot: meghatározni a kapcsolat kardinalitását (1:N, N:M, 1:1) abból, hol fekszik az idegen kulcs
- kibontani a „több a többhöz” kapcsolatot egy köztes táblán keresztül, két FK-val — mint az
order_itemsazorder_id+product_idpárral - elmagyarázni, miért nem tárolható a rendelés tartalma id-sztringként közvetlenül az
orders-ben
Ma a QUERY a teljes jegyzéket egyszerre hozza fel a fő asztalra. Öt fénylő sík lebeg a levegőben, és lassan forog — a fennmaradt világ térképe. Mellettük a pillanatképhez csatolt konzerválási napló pislákol, és egy sora alá van húzva: „Átadok öt táblát és egy hatodik nyomát. — K.” Megszámolod a síkokat. Pontosan öt. Hol a nyom?
QUERY: Ne hagyd, hogy a nyomok eltérítsenek. Előbb tanuld meg ezt az ötöt annyira, hogy csukott szemmel is megtaláld az utat — a többit majd megmutatja az archívum magától, amikor felkészültnek ítél.
A „Kotomarket” öt táblája
A továbbiakban ezzel az adatbázissal fogunk dolgozni — egy 2024-es webáruház pillanatképével. Tartsd úgy, mint a bolt térképét: ki jött be, mi van a kirakatban, mit vettek, és milyen műveleteket végeztek a vásárlás előtt.
| Tábla | Mit tárol |
|---|---|
users | vásárlókat: id, név, város és a regisztráció dátuma |
products | a kirakat termékeit: id, név, kategória, ár és készlet |
orders | rendeléseket: id, user_id, dátum, állapot és összeg |
order_items | a rendelések tartalmát: melyik termék, hány darab és milyen áron |
events | viselkedési eseményeket: megtekintések, kosárba helyezések és vásárlások |
A kapcsolatok így olvasandók: egy user → sok orders; egy order → sok order_items; egy product → sok order_items. Ha elveszel, nyisd meg a sémát jobbra — olyan, mint az eladótér alaprajza.
Nézzünk bele a rendelések táblájába: minden sorban van egy user_id — hivatkozás a vásárlóra. Így kapcsolódik az egyik tábla a másikhoz, és a térkép megszűnik öt különálló sziget lenni.

Kotomarket’s five tables
From here on we’ll be working with this database — a of an online shop from 2024. Hold it like a map of the store: who walked in, what’s on the shelves, what they bought, and what they did before buying.
| Table | What it holds |
|---|---|
users | buyers: id, name, city, and signup date |
products | storefront items: id, name, category, price, and stock |
orders | orders: id, user_id, date, status, and total |
order_items | order contents: which product, how many, and at what price |
events | behavioral events: views, add-to-carts, and purchases |
The links read like this: one user → many orders; one order → many order_items; one product → many order_items. If you get lost, open the schema on the right — it’s like the floor plan of the shop.
Let’s peek into the orders table: every row has a user_id — a reference to a buyer. That’s how one table links to another, and the map stops being five separate islands.
user_id-n keresztül:| id | user_id | status | total_amount |
|---|---|---|---|
| 1 | 18 | paid | 5980.00 |
| 2 | 10 | paid | 19750.00 |
| 3 | 26 | cancelled | 9560.00 |
| 4 | 26 | paid | 15530.00 |
| 5 | 8 | paid | 26710.00 |
| 6 | 37 | paid | 42110.00 |
Hogyan olvass ER-diagramot
A térképet, amelyet a QUERY kibontott, az iparágban ER-diagramnak (entity–relationship) nevezik: a téglalapok a táblák, a köztük lévő vonalak az idegen kulcsok menti kapcsolatok. A vonalon a legfontosabb a kardinalitás: hány sor felel meg az egyik oldalon hány sornak a másikon.
- 1:N, egy a többhöz — a leggyakoribb kapcsolat. Egy vásárló — sok rendelés. Az idegen kulcs mindig a „több” oldalon fekszik: a
user_idazorders-ben tárolódik, nem fordítva. Ez maga az olvasási szabály: megtaláltad az FK-t — megtaláltad az N oldalt. - N:M, több a többhöz — egy rendelésben sok termék van, és egy termék sok rendelésben fordul elő. Ilyen kapcsolatot relációs adatbázisban közvetlenül nem lehet kifejezni: nincs hova tenni az idegen kulcsot. Ezt egy köztes táblán keresztül bontják ki — nálunk ez az
order_items. Minden sora egyorder_id+product_idhivatkozáspárt hordoz, és egy N:M kapcsolatot két 1:N kapcsolattá alakít. Ráadásként: magának a kapcsolatnak attribútumai is lesznek — a darabszám és a vásárlás pillanatában érvényes ár. - 1:1, egy az egyhez — ritkábban fordul elő: például a nagy méretű vagy bizalmas mezőket egy azonos kulcsú külön táblába emelik ki.
-- Az N:M feloldás működés közben: „rendelés — termék” párok az order_items-ből
SELECT order_id, product_id, quantity
FROM order_items
LIMIT 6;
Buktató: a rendelés tartalmát közvetlenül az orders-ben tárolni — egy '7,12,3' alakú sztringként vagy azonosítók tömbjeként. Az ilyen adatokat nem lehet idegen kulccsal védeni, tisztességesen megszámolni, vagy a kirakattal összekapcsolni akrobatika nélkül. Ha „több a többhöz” kapcsolatot látsz — hozz létre egy köztes táblát két idegen kulccsal, mint az order_items.
Interview question
Interjúkérdés: hogyan valósítható meg relációs adatbázisban a „több a többhöz” kapcsolat?
Erős válasz: egy köztes táblán keresztül, két idegen kulccsal az összekapcsolandó táblákra — mint az order_items az order_id és a product_id párral: ez két 1:N kapcsolattá alakítja az N:M-et. Egyúttal magának a kapcsolatnak az attribútumait is tárolja benne — a darabszámot, a vásárlás pillanatában érvényes árat. Az ilyen tábla elsődleges kulcsa vagy a két FK összetett kulcsa, vagy egy helyettesítő id.