Gå til innholdet

Tabeller og felt

Hver tabell i basedb er en PostgreSQL-tabell; hvert felt en typet kolonne. Etiketten du skriver inn («Échéance») blir et lesbart fysisk navn (echeance) gjennom en stabil slugifisering: uten aksenter, med små bokstaver, uten reserverte ord.

TypePostgreSQL-kolonneMerknader
Kort teksttextén linje
Lang teksttextMarkdown: et utdrag i rutenettet, formatert visning når du holder musen over, en egen editor; kan referere til en kolonne
Formatert teksttext + CHECKHTML som renses ved skriving, skrevet i en visuell editor – se nedenfor
Tallnumericaldri flyttall: et beløp driver ikke
Valuta, Prosent, Varighet, Vurderingnumericet tall og dets visningsformat: 12,50 €, 15 %, 1:30, ★★★★☆
Avmerkingsboksboolean
Datodate
Dato og klokkesletttimestamptzet absolutt tidspunkt, vist i leserens tidssone
Enkeltvalgtext + CHECKfarge, ikon eller bilde per alternativ
Flervalgtext[] + CHECKkan filtreres med array-operatorene
E-posttext + CHECKen adresse som databasen kontrollerer, åpnes med ett klikk
Telefon, Strekkode, Adressetexten kort tekst og dens format: ringelenke, fast tegnbredde, lenke til kartet
URLtext + CHECKfullføres ved inntasting (exemple.fr → https://exemple.fr)
Personuuidet medlem av arbeidsområdet; å velge noen varsler vedkommende
Autonummerbigint identitynummererer også radene som finnes fra før; ingen skriver det inn
Relasjonuuid + FOREIGN KEYen ekte fremmednøkkel til måltabellen
Multippel relasjonuuid[]flere koblede rader, der integriteten opprettholdes av en trigger
Formelgenerert kolonne STOREDberegnes av PostgreSQL – eller ved lesing, se Formler
Oppslag, Aggregering, Antallingenberegnes ved lesing, via en relasjon
Knappingenåpner en adresse eller starter en automatisering
Fil, Bildejsonb (metadata)selve bytene går til fillagringen

Hver tabell har også sine systemkolonner: _id (UUID v7), _created_at, _updated_at, _created_by, _updated_by – vedlikeholdt av en trigger, aldri skrivbare via API-et. Rutenettet samler dem under Systeminformasjon, i kolonnemenyen: de finnes på hver tabell, og er nyttige på få.

Rutenettet til en tabell, med en beregnet varighet, et oppslag og et antall

Det grensesnittet lover, garanterer PostgreSQL. Et enkeltvalg er en CHECK-begrensning; en relasjon en FOREIGN KEY; en URL eller en e-postadresse et regulært uttrykk. En skriving i direkte SQL som bryter dem, avvises, akkurat som i grensesnittet:

Check constraints:
"ck_opportunites__statut__enum" CHECK (statut = ANY (ARRAY['nouveau', 'qualifie', …]))
Foreign-key constraints:
"fk_opportunites__clients_id" FOREIGN KEY (clients_id) REFERENCES b_t4z56fq_ventes.clients(_id)

Valuta, Prosent, Varighet, Vurdering, Telefon, Strekkode og Adresse velges som typer, men de er formater: kolonnen forblir et tall eller en tekst, det er bare visningen som endres.

FormatPåLeses og skrives inn
Valutaet tall12 500,00 € – euro, dollar, pund, sveitsisk franc, kanadisk dollar, yen
Prosentet tall15 %
Varighetet antall sekunder1:30, og skrives inn som 1h30, 90 min
Vurderinget tallfra 1 til 10 stjerner, settes med ett klikk
Telefonen kort teksten ringelenke
Strekkodeen kort tekstmed fast tegnbredde
Adresseen kort teksten lenke til kartet; i raddetaljene foreslår Finn adresse adressene som samsvarer, skrevet i sin helhet; visningen Kart plasserer den

Et format kan endres i etterkant (Visningsformat, når du redigerer feltet) uten å røre de lagrede verdiene. Det begrenser ikke verdien: en vurdering på 7 på en skala til 5 forblir 7.

Når du redigerer et felt, fastsetter Standardverdi hva en rad som opprettes uten den, får:

ValgPåDen opprettede raden får
En fast verdide fleste typerden valgte verdien — en status «Ny», en prioritet 3
Dagens datoen datodagen den ble opprettet, i personens tidssone
Tidspunktet for opprettelsenen dato og klokkeslettdet nøyaktige klokkeslettet
Personen som oppretter radenen personden som opprettet den — «Ansvarlig: meg»

Den nye raddetaljen og skjemaene åpnes forhåndsutfylt; å tømme feltet lar det stå tomt. Standardverdien gjelder for all opprettelse — grensesnitt, API, MCP, import, delt skjema, automatisering —, også på et felt personen ikke kan endre: det er tabellens regel. Eksisterende rader endres ikke, og en direkte SQL-innsetting mottar ingen: det er basedb som håndhever den, ikke kolonnen.

En formel skrives på engelsk (de franske navnene fungerer også), med feltene i hakeparenteser og argumentene skilt med ,:

ROUND([Montant HT] * (1 + [Taux de TVA]), 2)
IF([Payée], FALSE, DAYS(TODAY(), [Échéance]) > 0)
DAYS([Fin], [Début])

Editoren foreslår felt å sette inn og har et panel med funksjonene; en feilmelding navngir feltet eller tegnet det gjelder.

FamilieFunksjoner
LogikkIF, IFBLANK, ISBLANK, AND, OR, NOT, TRUE, FALSE
TallROUND, ABS, CEILING, FLOOR, MIN, MAX
TekstUPPER, LOWER, TRIM, LEFT, RIGHT, LEN, TEXT, VALUE
DatoerYEAR, MONTH, DAY, WEEKDAY, DAYS, ADD_DAYS, DATE, TODAY, NOW
Operatorer+ - * /, & for å slå sammen tekst, = <> < <= > >=

En formel blir en generert kolonne i PostgreSQL: psql og verktøyene dine leser den som alle andre. En formel som avhenger av dagens dato (TODAY(), NOW()) eller som refererer til et oppslag eller en aggregering, beregnes ved lesing: den kan filtreres og sorteres i basedb, men finnes ikke i direkte SQL.

En formel refererer verken til en annen formel eller direkte til en relasjon – det gjør et oppslag. Å hente ut eller erstatte en del av en tekst kommer senere.

Tre felt leser via en relasjon, i den ene eller den andre retningen – «prosjektets kunde», men også «oppgavene som er koblet via Projet»:

  • et oppslag henter en verdi fra den koblede raden, eller listen over verdier: byen til kunden for et prosjekt;
  • en aggregering beregner på de koblede radene: antall verdier, sum, gjennomsnitt, minimum, maksimum – omsetningen til en kunde, gjennomsnittsvurderingen i tilbakemeldingene fra kunden;
  • et antall teller de koblede radene: antall oppgaver i et prosjekt.

De beregnes ved hver lesing, med tillatelsene til den som leser: hvis den koblede tabellen er stengt for deg, er feltet det også. De kan filtreres og sorteres. De følger én enkelt relasjon, kan ikke skrives til, har ingen kolonne – og finnes derfor ikke i direkte SQL – og er verken med i importen, i skjemaene eller i historikken.

En relasjon kobler en rad til en rad i en annen tabell i samme database. Rutenettet viser visningsverdien til målraden – kolonnen du angir som visningsfelt for tabellen – og filtrene går gjennom relasjonen (clients_id.ville eq "Lyon"). Radene som peker på en rad, vises i raddetaljene dens.

Kryss av for Flere rader per post, så blir relasjonen multippel: en oppgave avhenger av flere oppgaver, en artikkel hører til flere kategorier. De koblede radene vises som merker, velges med et søk og åpnes med ett klikk fra raddetaljene. Når en målrad slettes, fjernes den fra listene som refererte til den – eller slettingen avvises, hvis du har valgt det. Filtrene has_any, has_all og is_null gjelder, og også de går gjennom relasjonen (taches_ids.titre contains "logo"). En multippel relasjon kan ennå ikke sorteres, grupperes eller importeres.

Et Knapp-felt har ingen verdi: det handler. Det åpner en adresse – https:// eller mailto:, som kan referere til raden (mailto:{{E-mail}}) – eller starter en automatisering som utløses av en knapp på samme tabell. Det vises i cellen, på kortet og i raddetaljene.

En database, en tabell og et felt har en beskrivelse, som kan endres uten migrering. Den kopieres inn i COMMENT ON som psql leser, i den genererte dokumentasjonen og i det en agent leser via describe_table.

Formatert tekst er HTML-varianten av lang tekst, valgt når feltet opprettes («Formatert tekst (HTML)»): overskrifter, fet, kursiv, understreket, gjennomstreket, lister, sitater, kode, lenker og skillelinjer, i en visuell editor. HTML-en renses ved skriving, enten den kommer fra grensesnittet, API-et, MCP-serveren eller en import, og en CHECK-begrensning avviser i tillegg farlige konstruksjoner som skrives direkte i SQL (<script>, on…-attributter, javascript:). Verken bilder, tabeller eller farger: det databasen ikke ville beholde, tilbys ikke.

En lang tekst – enkel eller formatert – kan referere til en kolonne i sin egen rad. Menyen Kolonne i editoren setter inn referansen ved markøren: et merke i formatert tekst, {{Ville}} i Markdown.

Levering planlagt {{Livraison}} i {{Ville}}.

  • Kolonnen lagrer referansen slik den er skrevet – {{ville}}, med det fysiske navnet: det er det psql leser.
  • Overalt ellers – rutenettet, raddetaljene, API-et, MCP-serveren, de delte visningene, automatiseringene – leses teksten med verdien fra raden: «Levering planlagt 02.10.2026 i Lyon.» Endrer du byen, endres teksten.
  • Et enkeltvalg leses med etiketten sin, en person med navnet sitt, en dato i ditt format; en verdi som settes inn i formatert tekst, er aldri markup.
  • En kolonne som leseren ikke har lov til å lese, gir ingenting: verken verdien eller navnet.

Formatert tekst kan ikke fylles ut av KI: en modell skriver tekst, ikke renset HTML.

Databasens Struktur-skjerm – i ⋯-menyen i sidepanelet – viser tabellene og feltene deres: legg til, gi nytt navn, gjør obligatorisk, endre rekkefølge, beskriv, angi visningsfeltet.

Struktur-skjermen for en database

Å endre strukturen krever nivået Administrere. Uten det kan skjermen bare leses og tilbyr ingenting: ingen knapp, ingen blyant, ingen dra-håndtak – at et felt er obligatorisk og hvilket som er visningsfelt, står oppgitt, men kan ikke endres. Serveren avviser uansett hver endring; skjermen later ikke lenger som om den godtar dem.

Å legge til, gi nytt navn til eller endre typen på et felt går via migreringsmotoren: en plan i trinn, korte låser og en navngitt avvisning når en verdi ikke kan konverteres.

Å gi nytt navn til en database, en tabell eller et felt gjøres i én og samme dialog. Etiketten endres alltid, uten migrering. En administrator ser under den «Gi nytt navn også i databasen: clients → comptes»: er den avkrysset, endres også det fysiske navnet, og konsekvensanalysen vises – spørringene, SQL-visningene og automatiseringene som refererer til det gamle navnet. Det gamle navnet fortsetter å fungere gjennom et kompatibilitetsalias – en visning – mens du oppdaterer spørringene dine.

Sletting fjerner ingenting med en gang: tabellen eller databasen flyttes til side (zz_supprime_…) og kan fortsatt leses i SQL. En slettet database kan gjenopprettes; å hente tilbake en enkelt tabell fra grensesnittet kommer senere. Den endelige tømmingen er forbeholdt administrasjonen, tretti dager etterpå, og begynner med en kontrollert CSV-eksport.

basedb er fri programvare fra Eodia, et KI-nativt programvarestudio.