Databases mingħajr ċpar

Tabelli, ringieli u ċwievet

11 min
What you'll learn
  • tagħraf id-differenza bejn tabelli, ringieli u kolonni u tispjega għalfejn kull ringiela għandha bżonn (normalment id)
  • issib ir-rabtiet bejn it-tabelli permezz tal-: orders.user_id → users.id
  • tagħraf id-differenza bejn ċavetta surrogata (IDENTITY, ) u waħda naturali (email, ISBN) u tiġġustifika għalfejn il-primary key m’għandux jinbidel
  • tiżgura l-unicità ta’ kamp bħal email b’restrizzjoni UNIQUE, mingħajr ma tagħmlu primary key

L-indiċi nfetaħ. QUERY jiftaħ fuq l-iskrivanija ologramma: eluf ta’ rekords jiddendlu fl-arja f’xibka ndaqs, u bejn xi wħud jinġibdu ħjut irqaq tal-ambra. Tilħaq għal waħda — iddoqq bħal korda. Dan mhux munzell fajls. Din hija drapp.

Tabelli, ringieli, kolonni

Database relazzjonali tixbah katalgu organizzat: id-data maqsuma f’tabelli, u ġewwa kull tabella hemm kolonni (liema proprjetajiet naħżnu) u ringieli (ir-rekords konkreti).

Ħu t-tabella tal-klijenti users: kull ringiela hija klijent wieħed tad-Dinja l-qadima, u l-kolonni jiddeskrivu l-id, full_name, email, country, city, signup_date tiegħu.

Biex ma tħawwadx in-nies bl-istess isem, kull ringiela għandha — identifikatur uniku, normalment il-kolonna id. Permezz tagħha tabelli oħra jistgħu jirreferu għal din ir-ringiela bl-għajnuna ta’ . Pereżempju, fl-ordni orders hemm user_id — hekk l-ordni tiftakar lill-klijent tagħha. Dawk il-ħjut tal-ambra fuq l-ologramma huma propju r-rabtiet biċ-ċwievet.

QUERY: Sakemm iċ-ċavetta sħiħa — il-ħajt sħiħ. Għaddew seklu u nofs, u kull ordni għadha tiftakar lill-bniedem tagħha.

Ħaddem il-mistoqsija u ara kif jidhru l-klijenti ta’ «Kotomarket» — rekords li ħadd ma fetaħ sa minn żmien in-Net il-qadim:

Tabella olografika ta’ ringieli-kapsuli u kolonni; mir-rekords tal-ordnijiet għar-rekords tan-nies jinġibdu ħjut tal-ambra taċ-ċwievet
Ir-ringieli huma rekords, il-kolonni l-proprjetajiet tagħhom, u l-ħajt mill-ordni għall-klijent huwa rabta biċ-ċavetta.

Tables, rows, columns

A relational database is like a tidy catalog: the data is sorted into tables, and inside each table there are columns (what properties we store) and rows (the individual records).

Take the buyers’ table users: each row is one buyer from old Earth, and the columns describe their id, full_name, email, country, city, signup_date.

So that people with the same name don’t get confused, every row has a — a unique identifier, usually the id column. Through it, other tables can reference this row using a . For example, an order in orders has a user_id — that’s how an order remembers its buyer. Those amber threads on the hologram are exactly these key-based links.

QUERY: As long as the key holds, the thread holds. A century and a half on, every order still remembers its person.

Run the query and see what Kotomarket’s buyers look like — records no one has opened since the days of the old Net:

L-ewwel klijenti ta’ «Kotomarket» fit-tabella:
Query result
idfull_namecitysignup_date
1Артём ВолковСанкт-Петербург2024-10-20
2Екатерина АлексеевЕкатеринбург2025-01-25
3Николай НикитинАлматы2024-09-21
4Екатерина ИвановНовосибирск2024-05-04
5Елена ПетровКазань2025-01-05
6Ирина КузнецовНовосибирск2024-09-12

Il- jgħinek issib mingħajr żball ringiela waħda (normalment id). Il- jorbot it-tabelli: pereżempju, orders.user_id → users.id juri ta’ min hi l-ordni. Aktar ’il quddiem QUERY jiftaħ quddiemek il-mappa kollha tal-istampa — il-ħames tabelli sħaħ.

usersidfull_namecityordersiduser_idstatususer_id → id
Il-foreign key orders.user_id jirreferi għall-primary key users.id — hekk l-ordni tiftakar lill-klijent tagħha.

Ċavetta naturali jew surrogata

Minn fejn tiġi l-? It-toroq huma tnejn. Ċavetta naturali — attribut reali li diġà huwa uniku: l-email tal-klijent, l-ISBN tal-ktieb, il-kodiċi tal-munita. Ċavetta surrogata — identifikatur artifiċjali bla tifsira fid-dinja ta’ barra: awtonumerazzjoni jew . F’«Kotomarket» kullimkien jintużaw id surrogati — u din hija soluzzjoni tipika:

-- Ċavetta surrogata: id-database innifsu joħroġ in-numru li jmiss (PostgreSQL)
CREATE TABLE users (
  id        BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
  email     TEXT NOT NULL UNIQUE,  -- il-kandidat naturali jgħix maġenbha bħala UNIQUE
  full_name TEXT NOT NULL
);

Għalfejn hekk? Il-proprjetà ewlenija tal-primary key: m’għandhiex tinbidel. Lejn il-PK jirreferu l-foreign keys ta’ tabelli oħra, u t-tibdil tal-valur kien iġorr miegħu l-aġġornament tal-ħjut kollha f’daqqa — f’orders, f’events, kullimkien. U attributi naturali «eterni» kważi ma jeżistux: in-nies ibiddlu l-email u l-kunjom, in-numri tat-telefon jiġu assenjati mill-ġdid, anki l-ISBN jiġu pubblikati mill-ġdid. id surrogat qatt ma jinbidel — propju għax ma jfisser xejn.

Ir-rekwiżiti għal kull primary key: uniku, mhux NULL, stabbli. Iċ-ċwievet naturali ħallihom għar-reġistri żgħar u mhux modifikabbli — pereżempju, il-kodiċi tal-munita 'RUB' mill-ISO 4217. U l-unicità ta’ kandidat naturali bħal email iffissaha b’restrizzjoni UNIQUE separata, bħal fl-eżempju ta’ fuq: ir-rabtiet jinżammu, id-data tibqa’ onesta, u li tbiddel l-email lill-klijent mhuwiex ipprojbit.

Naqbżu ’l quddiem: is-sintassi nnifisha tal-ħolqien tat-tabelli u r-restrizzjonijiet (CREATE TABLE, PRIMARY KEY, UNIQUE) hija s-suġġett tal-Kapitlu 9. Hawn ħares lejn l-istruttura taċ-ċavetta, mhux lejn il-kmand: li id surrogat sar il-, u email jgħix maġenbu bħala UNIQUE.

Interview question

Mistoqsija minn intervista: x’inhi d-differenza bejn ċavetta surrogata u waħda naturali u liema tagħżel għal tabella tal-utenti?

Tweġiba qawwija: naturali — attribut reali uniku (email, ISBN), surrogata — identifikatur artifiċjali (kolonna IDENTITY jew ). Għall-utenti — surrogata: il- m’għandhiex tinbidel, għax lejha jirreferu l-foreign keys, u l-email in-nies ibiddluha. L-unicità tal-email b’dan kollu tiġi ffissata b’restrizzjoni UNIQUE separata. Ċavetta naturali tkun ġustifikata f’reġistri stabbli bħall-kodiċijiet tal-muniti ISO 4217.

Check yourself
Għalfejn hemm bżonn foreign key f’database?