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ä.

Suhteella on aina kaksi puolta:
- Lapsipuoli (child), joka säilyttää viittauksen — taulun
contactossarakeconta_id. - Vanhempipuoli (parent), johon viitataan — taulun
contassarakeid.
Suhteen luominen
Suhteet piirretään kaavioon yhdistämällä kenttä toiseen kenttään:
- Vie hiiri lapsipuolen kentän päälle — rivi vastaa vihjeellä Vedä toisen taulun kenttään luodaksesi yhteyden.
- Vedä tästä kentästä vanhempipuolen kenttään (tyypillisesti toisen entiteetin pääavaimeen) ja pudota.
- Avautuu valintaikkuna Uusi suhde, jossa molemmat entiteetit ja molemmat sarakkeet ovat jo täytettyinä — ne tulivat vedosta eikä niitä muokata siinä.
- 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.
Navigaattorit
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.

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:
- Valitse sarake valintaikkunassa Uusi taulu (tai kohdassa Muokkaa rakennetta).
- Valitse kohdassa Tyyppi vaihtoehto
enum. - Näkyviin tulee laatikko Enumin arvot. Napsauta Lisää kohde jokaista arvoa varten.
- 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). |

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.

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ä.