KEPLIN Docs

Suhteet ja enumit

Taulujen kytkeminen toisiinsa — kardinaliteetti, navigaattorit, fyysiset ja virtuaaliset suhteet — sekä kentän arvojoukon sulkeminen enumilla.

Yksinäinen taulu säilöö listan. Sovellus tarvitsee enemmän: että yhteyshenkilöt tietävät, mille asiakkaalle ne kuuluvat, että myyntimahdollisuudet tietävät kenen ne ovat, ja että tila-kenttä hyväksyy vain ne tilat, jotka ovat olemassa.

Nämä ovat tämän sivun kaksi palasta: suhteet, jotka kytkevät entiteetit toisiinsa, ja enumit, jotka sulkevat kentän mahdollisten arvojen joukon.

Suhteet

Mallikaaviossa jokainen suhde on viiva kahden entiteetin välillä, ja siinä on nimike, joka kertoo reitin nimen ja kardinaliteetin — Asiakashallinnassa conta · 1:N entiteettien Contas ja Contactos välillä, ja samanlainen entiteettien Contas ja Oportunidades välillä.

Asiakashallinta-sovelluksen malli: entiteetit Contas, Contactos ja Oportunidades sekä niiden väliin piirretyt kaksi suhdetta.
Asiakashallinta-sovelluksen malli: entiteetit Contas, Contactos ja Oportunidades sekä niiden väliin piirretyt kaksi suhdetta.

Suhteella on aina kaksi puolta:

  • Lapsipuoli (child), joka säilyttää viittauksen — taulun contactos sarake conta_id.
  • Vanhempipuoli (parent), johon viitataan — taulun contas sarake id.

Suhteen luominen

Suhteet piirretään kaavioon yhdistämällä kenttä toiseen kenttään:

  1. Vie hiiri lapsipuolen kentän päälle — rivi vastaa vihjeellä Vedä toisen taulun kenttään luodaksesi yhteyden.
  2. Vedä tästä kentästä vanhempipuolen kenttään (tyypillisesti toisen entiteetin pääavaimeen) ja pudota.
  3. Avautuu valintaikkuna Uusi suhde, jossa molemmat entiteetit ja molemmat sarakkeet ovat jo täytettyinä — ne tulivat vedosta eikä niitä muokata siinä.
  4. Täytä loput (seuraavaksi) ja vahvista painikkeella Luo suhde.

Kardinaliteetti

Valintaikkunan ensimmäinen kenttä on Kardinaliteetti — montako kummallakin puolella:

Vaihtoehto Milloin käytetään
One-to-many (1:N) Yhdellä asiakkaalla on useita yhteyshenkilöitä. Yleisin tapaus.
Many-to-one (N:1) Sama asia toiselta puolelta katsottuna.
One-to-one (1:1) Yksi tietue yhtä tietuetta kohti — asiakas ja sen verotiedot.
Many-to-many (N:N) Monta moneen — tunnisteet asiakkailla, kouluttajat kursseilla. Vaatii liitostaulun.

Valinnan mukaan valintaikkuna näyttää kentät Child (sisältää vierasavaimen) ja Parent (viitattu) — tai N:N-tapauksessa Entiteetti A ja Entiteetti B.

Kaksi seuraavaa kenttää ovat navigaattorit — suhteen sydän ja se, mikä tekee siitä hyödyllisen kaavion ulkopuolella.

Navigaattori on virtuaalinen kenttä, jota ei ole tietokannassa: sillä hypätään tietueesta siihen liittyviin tietueisiin ja tuodaan toisen puolen sarakkeet mukaan API:issa. Juuri ne saavat yhteyshenkilöiden kyselyn palauttamaan jokaisen yhteyshenkilön mukana sen asiakkaan nimen, jolle yhteyshenkilö kuuluu — ilman toista kyselyä ja ilman koodia.

  • Navigaattori: Contactos → Contas — reitti lapsesta vanhempaan. Yksikössä oleva nimi: conta.
  • Navigaattori: Contas → [Contactos] — reitti vanhemmasta lapsiin. Monikossa oleva nimi: contactos. Hakasulkeet nimikkeessä kertovat, että tämä puoli palauttaa listan.

Toisen kentän jättäminen tyhjäksi on täysin pätevä päätös: silloin sitä puolta ei yksinkertaisesti julkaista. Jos kenenkään ei tarvitse siirtyä asiakkaasta sen yhteyshenkilöihin, älä luo sitä reittiä.

Entiteetin kortilla navigaattorit näkyvät osiossa Navigointi, nimi vasemmalla ja kohde oikealla — hakasulkeissa, kun kyseessä on lista.

Contactos-entiteetti ja sen Navigointi-osio: navigaattori conta vie sen asiakkaan tietueeseen, jolle yhteyshenkilö kuuluu.
Contactos-entiteetti ja sen Navigointi-osio: navigaattori conta vie sen asiakkaan tietueeseen, jolle yhteyshenkilö kuuluu.

Dica

Kohtele navigaattorien nimiä osana sovelluksen kieltä: conta, contactos, linhas, responsavel. Juuri niitä luet API:issa, näyttöjen datastoreissa ja tapahtumien koodissa — ja tänään huonosti valittu fk_ct_2 on sekaannusta ikuisesti.

Fyysinen vai virtuaalinen

Kenttä Suhteen tyyppi ratkaisee, kirjoitetaanko suhde myös tietokantaan:

Vaihtoehto Mitä se tekee
Virtuaalinen — vain alustan mallissa Suhde on olemassa alustalle: navigaattorit, API:t, näytöt. Tietokantaan ei kosketa.
Fyysinen — luo vierasavaimen tietokantaan Mallin lisäksi moottoriin luodaan vierasavain: jatkossa moottori itse hylkää conta_id-arvon, jota ei ole olemassa.

Fyysinen suhde on turvallisempi — eheys ei enää riipu siitä, kuka kirjoittaa. Virtuaalinen on se, mikä jää jäljelle, kun tietokannan skeemaan ei voi (tai ei haluta) koskea: kolmannen osapuolen tietokannat, muiden järjestelmien kanssa jaetut taulut, historiadata joka ei läpäisisi tarkistusta.

Kun vanhempi poistetaan

Kun vanhempi poistetaan (ON DELETE) kertoo, mitä lapsille tapahtuu, kun vanhempitietue poistetaan:

Vaihtoehto Mitä tapahtuu
Ei mitään (estää, jos lapsia on) Poisto epäonnistuu niin kauan kuin lapsia on.
Restrict — estää heti Sama asia, tarkistettuna heti.
Cascade — poistaa lapset Asiakkaan poistaminen poistaa sen yhteyshenkilöt ja myyntimahdollisuudet.
Set NULL — irrottaa lapset Lapset jäävät ilman vanhempaa (sarake tyhjenee). Edellyttää, että sarake hyväksyy tyhjän.

Fyysisessä suhteessa moottori panee tämän säännön täytäntöön. Virtuaalisessa suhteessa se tallentuu malliin ja astuu voimaan, jos suhde jonain päivänä materialisoidaan.

Atenção

Cascade on kätevä ja peruuttamaton: asiakkaan poistaminen vie mukanaan yhteyshenkilöt, myyntimahdollisuudet ja kaiken muun siihen ripustetun. Liiketoimintadatassa tapana on suosia vaihtoehtoa Ei mitään ja käsitellä poistoa prosessina — poistetaan vain se, millä ei ole enää mitään riippuvaista.

Moni-moneen

Vaihtoehdolla Many-to-many (N:N) valintaikkuna kysyy kolme asiaa lisää, koska tällainen suhde tarvitsee taulun väliin (liitostaulun), jossa on viittaus kumpaankin puoleen:

Kenttä Mikä se on
Liitostaulu Taulu, joka yhdistää nämä kaksi — esimerkiksi conta_etiqueta.
Sarake → A (child) Liitostaulun sarake, joka osoittaa ensimmäiseen entiteettiin.
Sarake → B (parent) Liitostaulun sarake, joka osoittaa toiseen.

Liitostaulun on oltava olemassa etukäteen: luo se kuten mikä tahansa muu (katso Taulut ja kentät).

Valmiina tulevat suhteet

Kun taulu tuodaan malliin, tietokannassa jo olevat vierasavaimet tulevat mukaan itsestään suhteina, ja navigaattorit ehdotetaan taulujen nimien perusteella. Näin Asiakashallinta syntyi kahden suhteensa kanssa — pitää vain varmistaa, että navigaattorien nimet ovat ne, jotka haluat lukea muualla sovelluksessa.

Suhteen poistaminen

Napsauta suhteen viivaa kaaviossa ja vahvista. Kysymys on suora: Poistetaanko tämä suhde mallista? — ja niin on vastauskin: suhde poistuu alustan mallista ja tietokantaan jo luotua fyysistä vierasavainta EI poisteta. Jos halusit oikeasti purkaa vierasavaimen moottorista, se tehdään tietokannassa.

Mihin ne sitten kelpaavat

Kun suhde on tehty, se näkyy kaikkialla:

  • API:issa sisäkkäisinä kenttinä: yhteyshenkilöiden kysely voi palauttaa conta { nome, cidade }.
  • Näyttöjen datastoreissa, master-detail-rakenteen kokoamiseen — ladatun asiakkaan id-arvolla suodatettu yhteyshenkilöiden taulukko (katso Datastoret ja data).
  • Datan eheydessä, kun suhde on fyysinen.

Enumit

Enum on kentän suljettu arvojoukko: asiakkaan estado on Aktiivinen, Keskeytetty tai Menetetty, eikä mitään muuta. Sen sijaan että kenttä hyväksyisi vapaata tekstiä — ja samaan sarakkeeseen päätyisivät ”aktiivinen”, ”Aktiivinen”, ”AKTIIVINEN” ja ”aktiivista” — joukko määritellään kerran.

Enumin luominen

Enum syntyy sarakkeessa, sillä hetkellä kun annat sarakkeelle tyypin:

  1. Valitse sarake valintaikkunassa Uusi taulu (tai kohdassa Muokkaa rakennetta).
  2. Valitse kohdassa Tyyppi vaihtoehto enum.
  3. Näkyviin tulee laatikko Enumin arvot. Napsauta Lisää kohde jokaista arvoa varten.
  4. Täytä kunkin kohteen kolme saraketta:
Sarake Mikä se on
Arvo Tallennettava arvo. Kirjaimia, numeroita ja _, alkaen kirjaimesta — käytännön mukaan isoin kirjaimin: ATIVO, EM_ANALISE.
Nimike Teksti, jonka ihmiset näkevät: Aktiivinen, Käsittelyssä.
Väri Valinnainen väri, jota käyttävät ne widgetit, jotka värittävät tiloja (Kanban, muotoilusäännöt).

Enum-tyyppinen sarake avaa Enumin arvot — jokaisella arvolla on arvo, nimike ja väri.
Enum-tyyppinen sarake avaa Enumin arvot — jokaisella arvolla on arvo, nimike ja väri.

Jokaisella enum-sarakkeella on oma enuminsa, ja sen nimi johdetaan taulusta ja sarakkeesta — taulun actividades sarake tipo antaa enumin ActividadesTipo.

Nota

Tietokannassa enum-sarake tallennetaan jäsenneltyyn kenttään — laatikko itse kertoo sen: Tietokantaan tallennetaan JSON-kenttä (1 tai N arvoa). Juuri se sallii saman kentän palvella tänään yksittäisvalintaa ja huomenna monivalintaa ilman skeeman muutosta.

Enumin muuttaminen

Avaa taulussa uudelleen Muokkaa rakennetta, valitse sarake ja muokkaa kohtaa Enumin arvot: lisää, vaihda nimike, vaihda väri, poista painikkeella ×. Vahvista painikkeella Ota muutokset käyttöön.

Nimikkeen tai värin muuttaminen on turvallista — ne ovat pelkkää esitystä. Arvon muuttaminen tai poistaminen ei ole: tietueille, joilla oli vanha arvo, jää arvo jota enum ei enää tunne.

Tyyppi `enum` sarakkeiden tyyppien listassa, tavallisten tyyppien rinnalla.
Tyyppi `enum` sarakkeiden tyyppien listassa, tavallisten tyyppien rinnalla.

Missä enumit näkyvät

Enum-kenttä lakkaa olemasta vapaata tekstiä koko alustalla:

Missä Mikä muuttuu
Kaaviossa Kenttä näkyy kursiivilla, ja tyypin paikalla on enumin nimi.
API:issa Kentän tyyppi rajaa arvot kiinteiksi, ja API hylkää minkä tahansa listan ulkopuolisen arvon.
Pudotusvalikko-widgetissä Kohdassa Vaihtoehtojen lähde valitaan Mallin enum ja sitten Enum-kenttä — vaihtoehdot ja nimikkeet tulevat mallista, eikä listoja tarvitse ylläpitää kahdessa paikassa.
Kanbanissa Kohdassa Sarakkeiden lähde vaihtoehto Enum luo yhden sarakkeen kutakin enumin arvoa kohti, väreineen.
Muotoilusäännöissä Ehdot vertaavat enumin arvoihin.

Dica

Aina kun kentällä on tunnettu joukko arvoja — tila, tyyppi, prioriteetti, kanava — tee siitä enum tekstikentän sijaan. Saat käännettävät nimikkeet, värit, oikeat suodattimet ja Kanbanin kaupan päälle.

Miksi ei…?

  • Miksi en pysty vetämään kentästä toiseen? Veto alkaa lapsipuolen kentän riviltä ja päättyy vanhempipuolen kentän riville. Jos vedät koko korttia, siirrät sitä kaaviossa — tartu kentän riviin.
  • Miksi API ei palauta liittyvän taulun dataa? Sen puolen navigaattori puuttuu. Tyhjä navigaattori on puoli, jota ei tarkoituksella julkaistu — luo suhde uudelleen nimi täytettynä.
  • Miksi fyysisen suhteen luonti epäonnistui? Vierasavain hyväksytään vain, jos jo olemassa oleva data noudattaa sitä. Jos lapsia osoittaa vanhempiin, joita ei ole, moottori kieltäytyy — siivoa orvot ensin tai luo suhde virtuaalisena.
  • Miksi näen suhteen vielä poistamisen jälkeen? Poistit sen mallista; vierasavain on yhä tietokannassa, ja juuri se tulee takaisin uudelleentuonnin mukana.
  • Miksi enum-kenttäni näyttää arvon nimikkeen sijaan? Widget ei ole kytketty mallin enumiin — kiinteän vaihtoehtolistan sijaan valitse Mallin enum ja osoita Enum-kenttä.