Sari la conținut

Tabele și câmpuri

Fiecare tabel din basedb este un tabel PostgreSQL; fiecare câmp, o coloană tipizată. Eticheta pe care o introduceți („Échéance”) devine un nume fizic lizibil (echeance) printr-o slugificare stabilă: fără diacritice, cu litere mici, fără cuvinte rezervate.

TipColoană PostgreSQLObservații
Text scurttextun singur rând
Text lungtextMarkdown: un fragment în grilă, randarea la trecerea cu mouse-ul, un editor dedicat; poate cita o coloană
Text formatattext + CHECKHTML curățat la scriere, redactat într-un editor vizual — vedeți mai jos
Numărnumericniciodată virgulă mobilă: o sumă nu derivă
Monedă, Procent, Durată, Evaluarenumericun număr și formatul său de afișare: 12,50 €, 15 %, 1:30, ★★★★☆
Casetă de selectareboolean
Datădate
Dată și orătimestamptzun moment absolut, afișat în fusul orar al cititorului
Selecție unicătext + CHECKculoare, pictogramă sau imagine pentru fiecare opțiune
Selecție multiplătext[] + CHECKfiltrabilă cu operatorii de tablou
E-mailtext + CHECKo adresă verificată de baza de date, deschisă cu un clic
Telefon, Cod de bare, Adresătextun text scurt și formatul său: link de apel, font monospațiat, link către hartă
URLtext + CHECKcompletat la introducere (exemple.fr → https://exemple.fr)
Persoanăuuidun membru al spațiului de lucru; desemnarea lui îl anunță
Număr automatbigint identitatenumerotează și rândurile deja existente; nimeni nu îl introduce
Relațieuuid + FOREIGN KEYo cheie străină reală către tabelul țintă
Relație multiplăuuid[]mai multe rânduri legate, a căror integritate este asigurată de un trigger
Formulăcoloană generată STOREDcalculată de PostgreSQL — sau la citire, vedeți Formule
Căutare, Agregare, Numărareniciunacalculate la citire, printr-o relație
Butonniciunadeschide o adresă sau lansează o automatizare
Fișier, Imaginejsonb (metadate)octeții merg în stocarea de fișiere

Fiecare tabel are și coloanele de sistem: _id (UUID v7), _created_at, _updated_at, _created_by, _updated_by — întreținute de un trigger, niciodată inscriptibile prin API. Grila le grupează sub Informații de sistem, în meniul coloanelor: există în fiecare tabel și sunt utile în puține.

Grila unui tabel, cu o durată calculată, o căutare și o numărare

Ce promite interfața, garantează PostgreSQL. O selecție unică este o constrângere CHECK; o relație, o FOREIGN KEY; un URL sau o adresă de e-mail, o expresie regulată. O scriere în SQL direct care le încalcă este refuzată, ca în interfață:

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)

Monedă, Procent, Durată, Evaluare, Telefon, Cod de bare și Adresă se aleg ca tipuri, dar sunt formate: coloana rămâne un număr sau un text, doar citirea se schimbă.

FormatPeSe citește și se introduce
Monedăun număr12 500,00 € — euro, dolar, liră sterlină, franc elvețian, dolar canadian, yen
Procentun număr15 %
Duratăun număr de secunde1:30, și se introduce 1h30, 90 min
Evaluareun numărde la 1 la 10 stele, setată cu un clic
Telefonun text scurtun link de apel
Cod de bareun text scurtcu font monospațiat
Adresăun text scurtun link către hartă; în fișă, Găsiți adresa propune adresele care corespund, scrise integral; vizualizarea Hartă o așază

Un format se poate schimba ulterior (Afișare, la editarea câmpului) fără a atinge valorile salvate. El nu limitează valoarea: o evaluare de 7 pe o scară de 5 rămâne 7.

La modificarea unui câmp, Valoare implicită fixează ce primește un rând creat fără el:

AlegerePeRândul creat primește
O valoare fixămajoritatea tipurilorvaloarea aleasă — un statut „Nou”, o prioritate 3
Data de astăzio datăziua creării sale, în fusul orar al persoanei
Momentul creăriio dată și orăora exactă
Persoana care creează rândulo persoanăcine l-a creat — „Responsabil: eu”

Fișa nouă și formularele se deschid precompletate; golirea câmpului îl lasă gol. Valoarea implicită se aplică la orice creare — interfață, API, MCP, import, formular partajat, automatizare —, inclusiv pe un câmp pe care persoana nu îl poate modifica: aceasta este regula tabelului. Rândurile existente nu se schimbă, iar o inserare în SQL direct nu primește niciuna: basedb o aplică, nu coloana.

O formulă se scrie în engleză (merg și numele în franceză), cu câmpurile între paranteze drepte și argumentele separate prin ,:

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

Editorul propune câmpurile de inserat și un panou cu funcțiile; o eroare numește câmpul sau caracterul în cauză.

FamilieFuncții
LogicăIF, IFBLANK, ISBLANK, AND, OR, NOT, TRUE, FALSE
NumereROUND, ABS, CEILING, FLOOR, MIN, MAX
TextUPPER, LOWER, TRIM, LEFT, RIGHT, LEN, TEXT, VALUE
DateYEAR, MONTH, DAY, WEEKDAY, DAYS, ADD_DAYS, DATE, TODAY, NOW
Operatori+ - * /, & pentru a alătura text, = <> < <= > >=

O formulă devine o coloană generată de PostgreSQL: psql și instrumentele dumneavoastră o citesc ca pe celelalte. Cea care depinde de ziua curentă (TODAY(), NOW()) sau care citează o căutare ori o agregare este calculată la citire: se poate filtra și sorta în basedb, dar nu există în SQL direct.

O formulă nu citează nici o altă formulă, nici direct o relație — o căutare face asta. Extragerea sau înlocuirea unei părți dintr-un text vor veni ulterior.

Trei câmpuri citesc printr-o relație, într-un sens sau în celălalt — „clientul proiectului”, dar și „sarcinile legate prin Proiect”:

  • o căutare aduce o valoare din rândul legat sau lista valorilor: orașul clientului unui proiect;
  • o agregare calculează pe rândurile legate: numărul de valori, suma, media, minimul, maximul — cifra de afaceri a unui client, evaluarea medie a recenziilor sale;
  • o numărare numără rândurile legate: numărul de sarcini ale unui proiect.

Sunt calculate la fiecare citire, cu permisiunile celui care citește: dacă tabelul legat vă este închis, câmpul este și el închis. Se pot filtra și sorta. Urmează o singură relație, nu se pot scrie, nu au coloană — deci nu există în SQL direct — și nu apar nici în import, nici în formulare, nici în istoric.

O relație leagă un rând de un rând dintr-un alt tabel al aceleiași baze. Grila afișează valoarea de afișare a rândului țintă — coloana pe care o desemnați ca atare pentru tabelul său — iar filtrele traversează relația (clients_id.ville eq "Lyon"). Rândurile care trimit către un rând apar în detaliile acelui rând.

Bifați Mai multe rânduri pe înregistrare și relația devine multiplă: o sarcină depinde de mai multe sarcini, un articol aparține mai multor categorii. Rândurile legate apar ca etichete, se aleg printr-o căutare și se deschid cu un clic din detaliile rândului. Ștergerea unui rând țintă îl scoate din listele care îl citau — sau este refuzată, dacă ați ales asta. Filtrele has_any, has_all și is_null se aplică și traversează și ele relația (taches_ids.titre contains "logo"). O relație multiplă nu se sortează, nu grupează și nu se importă încă.

Un câmp Buton nu are valoare: acționează. Deschide o adresă — https:// sau mailto:, care poate cita rândul (mailto:{{E-mail}}) — sau lansează o automatizare declanșată de un buton pe același tabel. Apare în celulă, pe card și în detaliile rândului.

O bază, un tabel și un câmp au o descriere, modificabilă fără migrare. Ea este copiată în COMMENT ON pe care îl citește psql, în documentația generată și în ceea ce citește un agent prin describe_table.

Textul formatat este varianta HTML a textului lung, aleasă la crearea câmpului („Text formatat (HTML)”): titluri, aldin, cursiv, subliniat, tăiat, liste, citate, cod, linkuri și separatoare, într-un editor vizual. HTML-ul este curățat la scriere, fie că vine din interfață, din API, din serverul MCP sau dintr-un import, iar o constrângere CHECK refuză în plus formele periculoase scrise direct în SQL (<script>, atribute on…, javascript:). Nici imagini, nici tabele, nici culori: ce nu ar păstra baza de date nu este propus.

Un text lung — simplu sau formatat — poate cita o coloană a rândului său. Meniul Coloană al editorului inserează citarea la cursor: o etichetă în textul formatat, {{Ville}} în Markdown.

Livrare prevăzută pe {{Livraison}} la {{Ville}}.

  • Coloana păstrează citarea așa cum a fost scrisă — {{ville}}, după numele ei fizic: asta citește psql.
  • Peste tot în altă parte — grila, detaliile rândului, API-ul, serverul MCP, vizualizările partajate, automatizările — textul se citește cu valoarea din rând: „Livrare prevăzută pe 02/10/2026 la Lyon.” Schimbarea orașului schimbă textul.
  • O selecție unică se citește după eticheta ei, o persoană după numele ei, o dată în formatul dumneavoastră; o valoare inserată în text formatat nu este niciodată marcaj.
  • O coloană pe care cititorul nu o poate citi nu dă nimic: nici valoarea, nici numele ei.

Textul formatat nu poate fi completat de AI: un model scrie text, nu HTML curățat.

Ecranul Structură al bazei — în meniul ei ⋯ din bara laterală — listează tabelele și câmpurile lor: adăugare, redenumire, marcare ca obligatoriu, reordonare, descriere, desemnarea câmpului de afișare.

Ecranul Structură al unei baze

Modificarea structurii cere nivelul Gestionare. Fără el, ecranul poate fi consultat și nu propune nimic: niciun buton, niciun creion, niciun mâner — caracterul obligatoriu și câmpul de afișare sunt indicate, nu oferite. Serverul refuză oricum fiecare modificare; ecranul nu mai pretinde că o acceptă.

Adăugarea, redenumirea sau schimbarea tipului unui câmp trec prin motorul de migrări: un plan în pași, blocări scurte și un refuz explicit atunci când o valoare nu se poate converti.

Redenumirea unei baze, a unui tabel sau a unui câmp se face într-un singur dialog. Eticheta se schimbă întotdeauna, fără migrare. Un administrator vede dedesubt „Redenumiți și în baza de date: clients → comptes”: bifată, opțiunea schimbă și numele fizic, iar analiza de impact se afișează — interogările, vizualizările SQL și automatizările care citează vechiul nume. Vechiul nume rămâne servit de un alias de compatibilitate — o vizualizare — cât timp vă actualizați interogările.

Ștergerea nu elimină nimic imediat: tabelul sau baza este retrogradată (zz_supprime_…) și rămâne lizibilă în SQL. O bază ștearsă se poate restaura; readucerea unui singur tabel din interfață va veni. Purjarea definitivă este rezervată administrării, după treizeci de zile, și începe cu un export CSV verificat.

basedb este software liber dezvoltat de Eodia, un studio de software AI-nativ.