Tabeller og felt
Modelleditoren — opprette tabeller, velge kolonnetyper, definere nøkler og indekser, og hente eksisterende tabeller inn i appens modell.
Før det finnes skjermer finnes det data: tabellene der applikasjonen lagrer kontoer, kontakter, bestillinger eller feriesøknader. I Keplin lever disse dataene i en database som er koblet til appen (en datakilde) og beskrives i en modell — tegningen over tabeller, felt, nøkler og relasjoner som resten av plattformen leser.
Denne siden handler om den første halvdelen av det arbeidet: å opprette og endre tabeller, velge typer, definere nøkler og indekser. Relasjonene og enum-feltene har sin egen side i Relasjoner og enums.
Eksemplene kommer fra appen Kundehåndtering: et CRM med tre tabeller —
contas, contactos og oportunidades.
To lag: databasen og modellen
Det er verdt å skille to ting som ligner på hverandre, med én gang:
| Lag | Hva det er | Hvem som bruker det |
|---|---|---|
| Databasen | Tabellene, kolonnene og indeksene som faktisk finnes i motoren som er koblet til appen. | Databasemotoren. Å endre den er å kjøre reelle kommandoer. |
| Modellen | Beskrivelsen av disse tabellene for plattformen: entiteter, felt, visningsnavn, beskrivelser, relasjoner og enums. | API-ene, skjermene, skriptene og rapportene. |
En tabell kommer bare inn i modellen når du importerer den — og å gå ut av modellen sletter ingenting i databasen. Det er derfor plattformen alltid skiller Fjern fra modellen fra Slett.
Åpne modellen
- Åpne appen og velg fanen Data i sidefeltet.
- Under Datakilder klikker du på navnet til datakilden — i Kundehåndtering, Dados CRM.
- Det åpnes en fane med modelldiagrammet i midten, SQL-konsollen nederst, og objekttreet til datakilden utvidet i sidefeltet.

Diagrammet dras med musen; knappene nede til venstre zoomer og rammer inn alt. Plasseringen til hver entitet lagres — du rydder diagrammet én gang, og slik åpner det seg igjen.
Objekttreet
Under datakilden viser treet hva som finnes i databasen, gruppert og med antallet i hver gruppe:
| Gruppe | Hva den lister opp |
|---|---|
| Tabeller | Tabellene i motoren. Hver av dem har sin egen meny (⋯). |
| Visninger | Visningene (lagrede spørringer med navn). |
| Programmering | Funksjoner / prosedyrer og Triggere — se Triggere. |

Feltet Søk i alt… øverst i sidefeltet filtrerer treet; med et aktivt søk åpner gruppene seg av seg selv, og en gruppe uten treff forsvinner.
Opprette en tabell
- Hold musen over datakilden og åpne menyen ⋯ (Handlinger for …).
- Velg Ny tabell.
- Fyll ut Navn på tabellen — det er navnet som blir liggende i databasen
(små bokstaver og understrek sparer deg for hodepine:
actividades,linhas_encomenda). - Skjema (valgfritt) betyr bare noe i motorer med skjemaer; la det stå tomt hvis du ikke bruker dem.
- Under Beskrivelse av tabellen skriver du hva den er til for. Det er ikke pynt: denne beskrivelsen følger tabellen på plattformen, og det er den som forklarer tabellen for den som kommer dit etter deg.
- Definer kolonnene (se nedenfor) og bekreft med Opprett tabell.

Merk
Tabellen opprettes på ordentlig, i databasen som er koblet til. Er tilkoblingen mot en produksjonsdatabase, er det der tabellen blir til.
Kolonnene
Panelet til venstre i dialogen er kolonnelisten (Kolonner (N)), og knappen + legger til en. Klikk på en kolonne i listen for å redigere den til høyre.
Tabellen starter alltid med en id-kolonne av typen integer, med
Primærnøkkel (PK) og Autoinkrement slått på — startpunktet som passer
9 av 10 tabeller.
| Felt | Hva det gjør |
|---|---|
| Navn | Navnet på kolonnen i databasen. |
| Type | Den logiske typen til kolonnen (fullstendig liste nedenfor). |
| Lengde | Bare i text og char — hvor mange tegn det er plass til. |
| Presisjon · Skala | Bare i decimal — antall siffer totalt og hvor mange som står til høyre for komma (18 · 2 for penger). |
| Enum-elementer | Bare i enum — se Relasjoner og enums. |
| Tillat NULL | Om kolonnen kan stå tom. Slått av nekter databasen poster uten verdi. |
| Primærnøkkel (PK) | Identifiserer posten entydig. |
| Autoinkrement | Motoren genererer verdien ved hver innsetting. |
| Beskrivelse | Hva denne kolonnen er til for. |

Søppelbøtta som dukker opp når du holder musen over en kolonne i listen, fjerner den (i en ny tabell forsvinner den fra listen med én gang).
Kolonnetypene
Typene er logiske: du beskriver hva kolonnen lagrer, og plattformen oversetter det til riktig type i motoren som er koblet til. Den samme tegningen fungerer for enhver støttet database.
| Type | Til hva |
|---|---|
text |
Tekst med variabel lengde — navn, beskrivelser, notater. |
char |
Tekst med fast lengde — landkoder, forkortelser. |
integer |
Heltall. Den naturlige typen for en id. |
smallint |
Små heltall. |
bigint |
Store heltall — tellere, eksterne identifikatorer. |
decimal |
Eksakte tall med desimaler. Det er pengenes type. |
float |
Tilnærmede tall — målinger, vitenskapelige prosenter. |
boolean |
Ja/nei. |
date |
En dato, uten klokkeslett. |
time |
Et klokkeslett, uten dato. |
datetime |
Dato og klokkeslett. |
uuid |
Universelle identifikatorer. |
json |
Frie strukturer lagret som strukturert tekst. |
binary |
Binært innhold. |
enum |
Et lukket sett med verdier, definert der og da — se Relasjoner og enums. |

Tips
For pengebeløp bruker du decimal med presisjon og skala (18 · 2), aldri
float. float lagrer tilnærminger — og et øre som forsvinner i avrunding på
en faktura er et problem som dukker opp måneder senere.
Primærnøkler
Primærnøkkel (PK) er det som identifiserer en post. I praksis er den ikke valgfri: uten PK kan en tabell leses, men kan verken redigeres eller slettes fra skjermene — Tabell sier ifra med Datastoren trenger en primærnøkkel, og Kanban slår av dra-og-slipp. Er nøkkelen satt sammen av mer enn én kolonne, slår du på Primærnøkkel (PK) i hver av dem.
Autoinkrement overlater nummereringen til motoren. Det gir bare mening i heltallskolonner.
Hente en tabell inn i modellen
En tabell som allerede finnes i databasen (opprettet av deg her, eller som lå der fra før) må inn i modellen for at API-ene og skjermene skal se den. Det finnes to veier, og de fører til det samme:
- Dra tabellen fra treet til diagrammet — den lander der du slipper den.
- Åpne menyen ⋯ for tabellen og velg Importer til modell.
Plattformen leser strukturen til tabellen og oppretter entiteten: et navn med
stor forbokstav (contas → Contas), feltene, nøklene og relasjonene den
finner deklarert i databasen.
Importen leser også om hver kolonne har en standardverdi i databasen, eller om
databasen genererer den (en identitet, en beregnet kolonne): disse feltene er
ikke påkrevd i skjemaer eller API-er, og beholder databasens verdi når de ikke
sendes. Entiteter som ble importert før denne informasjonen fantes, oppdateres
av plattformoppdateringen, som leser katalogen i hver database den når, i alle
apper og versjoner (én commit per versjon, «Valor por omissão das colunas lido
da base de dados»); en database som ikke svarer da, venter på neste
oppdatering, eller på kommandoen pnpm model:refresh-defaults på
plattformmaskinen. Å importere tabellen på nytt (dra, eller Importer til
modell) gjør det samme for én entitet.

En 64-bits heltallsnøkkel (bigint, eller en bred NUMBER i Oracle),
primær eller fremmed, kommer inn i modellen som ID: den reiser som tekst,
og en id over 9 007 199 254 740 991 kommer frem nøyaktig, noe et tall ikke
garanterte. En ID filtreres med eq, neq, in og nin. En bigint
som ikke er en nøkkel, forblir et tall, og entiteter som allerede er
importert, beholder typen de hadde.
Navnene på importerte relasjoner gjentar aldri navnet til en kolonne eller en
annen relasjon: en kolonne cliente som peker til tabellen cliente, gir
relasjonen clienteRel, og to nøkler til samme tabell får navn hentet fra
kolonnene (moradaEntrega, moradaFaturacao). Å opprette en relasjon for
hånd med et navn som allerede er i bruk, avvises.
Kortet til en entitet
Hver entitet er et kort i diagrammet:
- Navnet på entiteten i toppen, og to knapper: Finn i treet (merker den tilsvarende tabellen i sidefeltet) og Fjern fra modellen.
- Ett felt per linje, med navnet til venstre og typen til høyre. Merket PK viser primærnøkkelen, og et ! etter typen betyr at feltet ikke godtar tomt.
- Enum-felt vises i kursiv, med navnet på enumen i stedet for typen.
- Med mange felt krymper kortet og tilbyr Vis N felt til / Vis mindre.
- Nederst lister seksjonen Navigasjon opp veiene til de relaterte entitetene — temaet i Relasjoner og enums.

Advarsel
Fjern fra modellen gjør nøyaktig det: entiteten og feltene og relasjonene dens går ut av plattformens modell, og tabellen i databasen røres ikke. Det er API-ene som brukte entiteten som slutter å virke.
Endre en tabell
Menyen ⋯ for en tabell → Rediger struktur åpner strukturredigereren, med to faner: Kolonner og Indekser (N).

Øverst står de tre tingene som beskriver tabellen:
| Felt | Hva det er |
|---|---|
| Navn i databasen | Det virkelige navnet på tabellen. |
| Visningsnavn (apper) | Navnet tabellen er kjent under i appen. |
| Beskrivelse av tabellen | Hva den er til for. |
Visningsnavn (apper) er broen mellom en database du har arvet og en app som
er til å lese: kolonnen kan hete cli_nm_fis i databasen og nome i appen. Det
finnes også per kolonne — og det er visningsnavnet som dukker opp i API-ene, i
datastorene og på skjermene.
Når du endrer Visningsnavnet (apper) til en kolonne, oppdateres tabell-API-ene som velger den og datareglene i tillatelsene som bruker den. Skjermer og rapporter som allerede ber om feltet med det gamle navnet, endres ikke av seg selv: gå gjennom dem etter at du har endret navnet.
Endre kolonnene
Klikk på en kolonne i listen til venstre for å redigere den. Endringene skjer ikke med én gang: de samler seg opp og skjer først når du trykker på Bruk endringene.
- En kolonne som legges til med + er merket som ny og har notatet Ny kolonne — opprettes når endringene tas i bruk.
- Å slette en kolonne som finnes fra før (søppelbøtta i enden av linjen) streker den over og viser Merket for sletting (DROP) når endringene tas i bruk; Angre tar det tilbake.
- Er det ingenting å ta i bruk, sier plattformen Ingen endringer.

Advarsel
Å endre typen på en kolonne som allerede finnes avhenger av motoren. Noen motorer kan det ikke, og plattformen sier det til deg i stedet for å prøve i blinde — utveien er i de tilfellene å opprette en ny kolonne, flytte dataene og slette den gamle. Å slette en kolonne sletter dataene som ligger der: det finnes ingen Angre etter Bruk endringene.
Indekser
Fanen Indekser (N) lister opp indeksene i tabellen — navn, unique-merket og
kolonnene — og lar deg opprette og slette.
Slik oppretter du en indeks:
- Skriv navnet (konvensjonen
ix_alguma_coisaer god, og det er den feltet foreslår). - Kryss av for unique hvis indeksen også skal hindre gjentatte verdier — det er slik du sikrer at det ikke finnes to kunder med samme organisasjonsnummer.
- Klikk på kolonnene som inngår i indeksen (rekkefølgen du klikker i er rekkefølgen i indeksen).
- Opprett indeks.

En tabell uten egne indekser sier Ingen indekser (utenom PK-en) — primærnøkkelen er allerede en indeks, den trenger ikke å opprettes.
Tips
Indeksene som betyr noe er de på kolonnene du filtrerer og sorterer på
hver dag: conta_id i en detaljtabell, datoen i en historikk, statusen listen
filtreres på. For mange indekser gjør skrivingen tregere — ikke opprett dem
«for sikkerhets skyld».
Se dataene
Menyen ⋯ for en tabell → Vis data åpner SQL-konsollen nederst, med spørringen allerede kjørt og resultatet synlig. Det er den raske måten å bekrefte hva som ligger der uten å forlate modellen.

Konsollen godtar også SQL du skriver selv: skriv til venstre, Kjør, og resultatet dukker opp til høyre med antall rader. Skillelinjen mellom konsollen og diagrammet kan dras, og pilen i hjørnet slår den sammen.
Slette en tabell
Menyen ⋯ for en tabell har Slett, med bekreftelse: Denne operasjonen er permanent og fjerner objektet fra databasen. Ikke forveksle det med Fjern fra modellen, som bare tar entiteten ut av beskrivelsen av appen.
Hvorfor ikke…?
- Hvorfor ser jeg ikke tabellen min i API-ene? Sannsynligvis er den ennå ikke i modellen. Dra den fra treet til diagrammet, eller bruk Importer til modell.
- Hvorfor dukker ikke kolonnen jeg opprettet opp? Sjekk at du trykket på Bruk endringene — i strukturredigereren skjer ingenting før det.
- Hvorfor lar ikke den nye tabellen min meg redigere poster på skjermene? Primærnøkkel (PK) mangler. Uten den kan skjermene bare lese.
- Hvorfor får jeg ikke endret typen på en kolonne? Det finnes motorer uten «endre kolonne». Plattformen sier ifra, og veien er ny kolonne → kopiere dataene → slette den gamle.
- Hvorfor er ikke navnet på feltet i appen det samme som i databasen? Visningsnavn (apper) er satt for den kolonnen. Det er med vilje — og redigeres på samme sted.
- Hvorfor forsvant entiteten fra diagrammet, mens tabellen fortsatt står i treet? Den ble fjernet fra modellen. Dra den fra treet til diagrammet igjen.