Tietomallinnus: milloin JSONB voittaa normalisoinnin
Päätä JSONB-sarakkeen ja erillisen taulun välillä — joustavat attribuutit vai tiukat skeemat.
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?
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
- JSONB vai JSON: milloin kumpaakin käytetään
- Polkuoperaattorit: -> ->> @>
- JSONB:n indeksointi GIN-indekseillä
- Tietomallinnus: milloin JSONB voittaa normalisoinnin