Shema Kotomarketa
What you'll learn
- pronaći potrebnu tablicu među pet u Kotomarketu:
users,products,orders,order_items,events - čitati ER dijagram: odrediti kardinalnost veze (1:N, N:M, 1:1) prema tome gdje leži vanjski ključ
- razviti vezu „više prema više” kroz međutablicu s dva FK — kao
order_itemssorder_id+product_id - objasniti zašto se sastav narudžbe ne može čuvati nizom id-jeva izravno u
orders
Danas QUERY iznosi na glavni stol cijeli popis odjednom. Pet svjetlećih ploha lebdi u zraku i polako se okreće — karta preživjelog svijeta. Pokraj treperi dnevnik konzervacije priložen snimci, a jedan je redak u njemu podcrtan: „Predajem pet tablica i trag šeste. — K.” Prebrojiš plohe. Točno pet. Gdje je trag?
QUERY: Ne daj se omesti tragovima. Najprije nauči ovih pet tako dobro da nađeš put zatvorenih očiju — ostalo će arhiv pokazati sam, kad te procijeni spremnim.
Pet tablica Kotomarketa
Nadalje ćemo raditi s ovom bazom — snimkom internetske trgovine iz 2024. Drži je kao kartu trgovine: tko je došao, što leži na izlogu, što su kupili i koje su radnje obavljali prije kupnje.
| Tablica | Što čuva |
|---|---|
users | kupce: id, ime, grad i datum registracije |
products | proizvode izloga: id, naziv, kategoriju, cijenu i zalihu |
orders | narudžbe: id, user_id, datum, status i iznos |
order_items | sastav narudžbi: koji proizvod, koliko komada i po kojoj cijeni |
events | bihevioralne događaje: preglede, dodavanja u košaricu i kupnje |
Veze se čitaju ovako: jedan user → mnogo orders; jedan order → mnogo order_items; jedan product → mnogo order_items. Ako se izgubiš, otvori shemu zdesna — ona je kao tlocrt prodajnog prostora.
Zavirimo u tablicu narudžbi: u svakom retku postoji user_id — referenca na kupca. Tako se jedna tablica povezuje s drugom, i karta prestaje biti pet odvojenih otoka.

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:| 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 |
Kako čitati ER dijagram
Kartu koju je QUERY razvio u industriji zovu ER dijagram (entity–relationship): pravokutnici su tablice, linije među njima su veze po vanjskim ključevima. Najvažnija je na liniji kardinalnost: koliko redaka s jedne strane odgovara kolikima s druge.
- 1:N, jedan-prema-više — najčešća veza. Jedan kupac — mnogo narudžbi. Vanjski ključ uvijek leži na strani „više”:
user_idse čuva uorders, a ne obratno. To je upravo pravilo čitanja: našao FK — našao stranu N. - N:M, više-prema-više — u jednoj narudžbi mnogo proizvoda, a jedan se proizvod javlja u mnogo narudžbi. Takvu vezu nije moguće izraziti izravno u relacijskoj bazi: vanjski ključ nema kamo staviti. Razvija se kroz međutablicu — kod nas je to
order_items. Svaki njezin redak nosi par referenciorder_id+product_idi pretvara jednu vezu N:M u dvije veze 1:N. Bonus: sama veza dobiva atribute — broj komada i cijenu u trenutku kupnje. - 1:1, jedan-prema-jedan — javlja se rjeđe: primjerice, teška ili privatna polja izmještaju se u zasebnu tablicu s istim ključem.
-- Razrješenje N:M na djelu: parovi „narudžba — proizvod” iz order_items
SELECT order_id, product_id, quantity
FROM order_items
LIMIT 6;
Zamka: čuvati sastav narudžbe izravno u orders — nizom '7,12,3' ili poljem identifikatora. Takve podatke ne možeš zaštititi vanjskim ključem, pošteno prebrojiti ni spojiti s izlogom bez akrobacija. Vidiš li vezu „više prema više” — stvori međutablicu s dva vanjska ključa, kao order_items.
Interview question
Pitanje s razgovora za posao: kako se u relacijskoj bazi ostvaruje veza „više prema više”?
Snažan odgovor: kroz međutablicu s dva vanjska ključa na tablice koje se povezuju — kao order_items s order_id i product_id: ona pretvara N:M u dvije veze 1:N. Usput se u njoj čuvaju atributi same veze — količina, cijena u trenutku kupnje. Primarni ključ takve tablice je ili složeni od dvaju FK ili surogatni id.