Databases mingħajr ċpar

L-iskema ta’ «Kotomarket»

11 min
What you'll learn
  • issib it-tabella t-tajba fost il-ħamsa f’«Kotomarket»: users, products, orders, order_items, events
  • taqra ER-dijagramma: tiddetermina l-kardinalità tar-rabta (1:N, N:M, 1:1) skont fejn jinsab il-
  • tiftaħ rabta «ħafna ma’ ħafna» permezz ta’ tabella intermedjarja b’żewġ FK — bħal order_items b’order_id + product_id
  • tispjega għalfejn il-kontenut tal-ordni ma jistax jinżamm bħala ringiela ta’ id direttament f’orders

Illum QUERY itella’ fuq il-mejda prinċipali l-indiċi kollu f’daqqa. Ħames pjani li jiddu jiddendlu fl-arja u jduru bil-mod — mappa tad-dinja li baqgħet ħajja. Maġenbhom iteptep il-ġurnal tal-konservazzjoni mehmuż mal-istampa, u ringiela waħda fih hija sottolinjata: «Ngħaddi ħames tabelli u t-trazza tas-sitta. — K.» Tgħodd il-pjani. Eżatt ħamsa. Fejn hi t-trazza?

QUERY: Tiddistrajx ruħek bit-trazzi. L-ewwel itgħallem dawn il-ħamsa sew biex issib it-triq b’għajnejk magħluqa — il-bqija l-arkivju jurihulek hu, meta jħossok lest.

Il-ħames tabelli ta’ «Kotomarket»

Minn hawn ’il quddiem se naħdmu ma’ din id-database — stampa ta’ ħanut online tas-sena 2024. Żommha bħal mappa tal-ħanut: min daħal, x’hemm fuq il-vetrina, x’xtraw u liema azzjonijiet għamlu qabel ix-xiri.

TabellaX’taħżen
usersil-klijenti: id, isem, belt u data tar-reġistrazzjoni
productsil-prodotti tal-vetrina: id, isem, kategorija, prezz u stokk
ordersl-ordnijiet: id, user_id, data, status u total
order_itemsil-kontenut tal-ordnijiet: liema prodott, kemm biċċiet u bi liema prezz
eventsl-avvenimenti tal-imġiba: dehriet, żidiet fil-karrettun u xiri

Ir-rabtiet jinqraw hekk: user wieħed → ħafna orders; order wieħed → ħafna order_items; product wieħed → ħafna order_items. Jekk tintilef, iftaħ l-iskema fuq il-lemin — hija bħal pjanta tas-sala tal-bejgħ.

Nitfgħu għajn fit-tabella tal-ordnijiet: f’kull ringiela hemm user_id — referenza għall-klijent. Hekk tabella waħda torbot ma’ oħra, u l-mappa tieqaf tkun ħames gżejjer separati.

Ħames tabelli-pjani olografiċi jduru bħal kostellazzjoni, marbuta bi ħjut; fil-ġenb tinħass bilkemm trazza bit-tikek tas-sitt kontorn
Il-mappa tal-arkivju: ħames tabelli u r-rabtiet bejniethom. Il-ġurnal tal-konservazzjoni jwiegħed ukoll «it-trazza tas-sitta» — imma sa issa ma tidhirx.

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.

TableWhat it holds
usersbuyers: id, name, city, and signup date
productsstorefront items: id, name, category, price, and stock
ordersorders: id, user_id, date, status, and total
order_itemsorder contents: which product, how many, and at what price
eventsbehavioral 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.

L-ordnijiet u r-rabta tagħhom mal-klijent permezz ta’ user_id:
Query result
iduser_idstatustotal_amount
118paid5980.00
210paid19750.00
326cancelled9560.00
426paid15530.00
58paid26710.00
637paid42110.00

Kif taqra ER-dijagramma

Il-mappa li fetaħ QUERY, fl-industrija jsejħulha ER-dijagramma (entity–relationship): ir-rettangoli — tabelli, il-linji bejniethom — rabtiet bil-foreign keys. L-aktar ħaġa importanti fuq il-linja hija l-kardinalità: kemm-il ringiela minn naħa waħda jikkorrispondu għal kemm mill-oħra.

  • 1:N, wieħed-ma’-ħafna — l-aktar rabta frekwenti. Klijent wieħed — ħafna ordnijiet. Il- dejjem jinsab fuq in-naħa ta’ «ħafna»: user_id jinħażen f’orders, u mhux bil-maqlub. Din hija propju r-regola tal-qari: sibt l-FK — sibt in-naħa N.
  • N:M, ħafna-ma’-ħafna — f’ordni waħda ħafna prodotti, u prodott wieħed jidher f’ħafna ordnijiet. Direttament tali rabta f’database relazzjonali ma tistax tesprimiha: il-foreign key m’hemmx fejn tpoġġih. Tiftaħha permezz ta’ tabella intermedjarja — għalina din hija order_items. Kull ringiela tagħha ġġorr par referenzi order_id + product_id u tibdel rabta waħda N:M f’żewġ rabtiet 1:N. Bonus: ir-rabta nnifisha tikseb attributi — l-għadd ta’ biċċiet u l-prezz fil-mument tax-xiri.
  • 1:1, wieħed-ma’-wieħed — tiltaqa’ magħha inqas spiss: pereżempju, kampi tqal jew privati joħorġuhom f’tabella separata bl-istess ċavetta.
-- Ir-riżoluzzjoni N:M fl-azzjoni: pari «ordni — prodott» minn order_items
SELECT order_id, product_id, quantity
FROM order_items
LIMIT 6;
usersidnameproductsidpriceordersiduser_ideventsuser_idproduct_idorder_itemsorder_idproduct_iduser_id → idproduct_id → idPKFK (reference)
ER-dijagramma ta’ «Kotomarket»: rabtiet 1:N minn users għal orders u r-riżoluzzjoni N:M bejn orders u products permezz ta’ order_items.

Tfixkil: taħżen il-kontenut tal-ordni direttament f’orders — bħala ringiela '7,12,3' jew array ta’ identifikaturi. Tali data ma tistax tipproteġiha bil-, tgħoddha onestament jew torbotha mal-vetrina mingħajr akrobazija. Tara rabta «ħafna ma’ ħafna» — oħloq tabella intermedjarja b’żewġ foreign keys, bħal order_items.

Interview question

Mistoqsija minn intervista: kif timplimenta rabta «ħafna ma’ ħafna» f’database relazzjonali?

Tweġiba qawwija: permezz ta’ tabella intermedjarja b’żewġ foreign keys lejn it-tabelli li jiġu marbuta — bħal order_items b’order_id u product_id: tibdel N:M f’żewġ rabtiet 1:N. Fl-istess ħin fiha jaħżnu l-attributi tar-rabta nnifisha — l-għadd, il-prezz fil-mument tax-xiri. Il- ta’ tali tabella hija jew kompost miż-żewġ FK, jew id surrogat.

Check yourself
Fejn fl-iskema tidher liema prodott daħal f’liema ordni?