SQL Academy · Oppitunti

Tietomallinnus: milloin JSONB voittaa normalisoinnin

Päätä JSONB-sarakkeen ja erillisen taulun välillä — joustavat attribuutit vai tiukat skeemat.

Oppitunti 4/414 vaihetta

Tietomallinnus: milloin JSONB voittaa normalisoinnin on ilmainen SQL Academy-oppitunti CoddyKitissä. Tämä on oppitunti 4/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu SQL Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. SQL Academy-kurssilla on yhteensä 4 oppituntia.

Valinta

Jokaisen tallennettavan tietokohteen kohdalla on valittava: sarake vai JSONB-avain? Vastaus vaikuttaa skeeman suunnitteluun, kyselyiden suorituskykyyn ja ylläpidettävyyteen.

Milloin sarakkeet ovat parempi valinta

Käyttäkää oikeita sarakkeita, kun tieto on:

  • Tunnettua ja vakaata
  • Usein kyseltyä ja indeksoitua
  • CHECK- tai FK-rajoitteilla validoitua
  • Raportoinnin tai liitosten kohteena

Milloin JSONB on parempi valinta

Käyttäkää JSONB:tä, kun:

  • Rakenne vaihtelee riveittäin (vuokraajan määrittämät kentät, liitännäisten metatiedot)
  • Skeema kehittyy nopeasti (siirtymisiä voidaan välttää)
  • Koko asiakirjan lukeminen ja kirjoittaminen on tavallista
  • Tallennatte läpinäkymättömiä hyötykuormia (webhook-pyynnön rungot)

Hybridirakennemalli

Molempien parhaat puolet: rakenteiset sarakkeet vakaalle ytimelle ja JSONB vaihtelevalle osalle:

CREATE TABLE events (
  id BIGSERIAL PRIMARY KEY,
  ts TIMESTAMPTZ NOT NULL,
  event_type TEXT NOT NULL,
  user_id BIGINT,
  data JSONB NOT NULL DEFAULT '{}'::JSONB
);

EAV-ansa

Klassinen "entity-attribute-value"-malli — yksi taulu, jonka riveillä on (avain, arvo) — oli ennen ainoa vaihtoehto harvalle datalle. JSONB korvaa EAV:n yhdellä asiakirjasarakkeella:

-- Old EAV:
CREATE TABLE user_attrs (
  user_id BIGINT,
  attr TEXT,
  val TEXT
);

-- Modern:
ALTER TABLE users ADD COLUMN attrs JSONB NOT NULL DEFAULT '{}';

-- JSONB queries are faster and easier than the EAV joins.

Siirtymästrategia

Sarakkeen lisääminen vilkkaaseen tauluun voi aiheuttaa suuressa taulussa viiden minuutin käyttökatkon. JSONB:tä käytettäessä kentän lisääminen on vain sovelluskoodin muutos.

JSONB:n rajoitteet

Lisätkää CHECK-rajoitteita vähimmäisrakenteen pakottamiseksi:

ALTER TABLE events
  ADD CONSTRAINT data_has_type CHECK (data ? 'type'),
  ADD CONSTRAINT type_is_string CHECK (jsonb_typeof(data->'type') = 'string');

Siirtäkää usein käytetyt kentät sarakkeiksi

Jos JSONB-kentästä tulee usein kyselty, siirtäkää se oikeaksi sarakkeeksi. UPDATE-komento, uusi indeksi ja uusi sarake nopeuttavat sen käyttöä.

JSONB:n paikkausoperaatiot

Päivittäkää yksi kenttä:

UPDATE users
SET attrs = jsonb_set(attrs, '{plan}', '"pro"')
WHERE id = 1;

Älkää tallentako rahamääriä JSONB:hen

Taloudelliset arvot tarvitsevat tarkat NUMERIC-tyypit ja rajoitteet. Käyttäkää aina oikeita sarakkeita.

Milloin JSONB:stä on haittaa

Jos poimitte ja muunnatte saman JSONB-avaimen jokaisessa kyselyssä, se on merkki siitä, että avaimen pitäisi olla sarake. Lausekkeen (data->>'k')::INT toistuvasta suorittamisesta miljoonilla riveillä syntyvä kumulatiivinen kustannus kasvaa suureksi.

Skeeman dokumentointi

JSONB-sarakkeisiin on helppo kirjoittaa, mutta niitä on vaikea dokumentoida. Ylläpitäkää ulkoista skeemaa (JSON Schema, sovelluskoodi), jotta yhteistyökumppanit tietävät, mitä odottaa.

Kertaus

JSONB on tehokas työkalu — käyttäkää sitä vaihteleviin osiin ja oikeita sarakkeita vakaaseen ytimeen. Siirtäkää usein käytetyt kentät sarakkeiksi, kun niiden käyttötavat vakiintuvat.

Pikatarkistus

Tallennatte auditointitapahtumia. Tapahtumatyyppi on aina mukana, mutta joidenkin tapahtumien "actors"-taulukon rakenne vaihtelee. Miten mallinnatte sen?

Aloita maksutta

Opi SQL tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
46
Oppitunnit
183

Usein kysytyt kysymykset

Onko oppitunti ”Tietomallinnus: milloin JSONB voittaa normalisoinnin” ilmainen?

Kyllä – oppitunnin ”Tietomallinnus: milloin JSONB voittaa normalisoinnin” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko SQL Academy-kurssin, päivitä CoddyKit PROhon. SQL Academy-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”Tietomallinnus: milloin JSONB voittaa normalisoinnin”?

Päätä JSONB-sarakkeen ja erillisen taulun välillä — joustavat attribuutit vai tiukat skeemat. Harjoittelet SQL Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni SQL Academy-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin SQL Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 4/4.

Kuinka kauan ”Tietomallinnus: milloin JSONB voittaa normalisoinnin”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä SQL Academy-oppitunnilla?

Kyllä. Jokainen SQL Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. JSONB vai JSON: milloin kumpaakin käytetään
  2. Polkuoperaattorit: -> ->> @>
  3. JSONB:n indeksointi GIN-indekseillä
  4. Tietomallinnus: milloin JSONB voittaa normalisoinnin
← Takaisin: SQL Academy