Przejdź do głównej zawartości

Tabele i pola

Każda tabela w basedb jest tabelą PostgreSQL; każde pole – typowaną kolumną. Wpisana przez ciebie etykieta („Échéance”) staje się czytelną nazwą fizyczną (echeance) dzięki stabilnej slugifikacji: bez znaków diakrytycznych, małymi literami, bez słów zastrzeżonych.

TypKolumna PostgreSQLUwagi
Krótki teksttextjedna linia
Długi teksttextMarkdown: fragment w siatce, podgląd po najechaniu, osobny edytor; może przytaczać kolumnę
Tekst sformatowanytext + CHECKHTML oczyszczany przy zapisie, pisany w edytorze wizualnym – zobacz niżej
Liczbanumericnigdy liczba zmiennoprzecinkowa: kwota się nie rozjeżdża
Waluta, Procent, Czas trwania, Ocenanumericliczba i jej format wyświetlania: 12,50 €, 15 %, 1:30, ★★★★☆
Pole wyboruboolean
Datadate
Data i godzinatimestamptzchwila bezwzględna, wyświetlana w strefie czasowej czytającego
Pojedynczy wybórtext + CHECKkolor, ikona lub obraz dla każdej opcji
Wielokrotny wybórtext[] + CHECKfiltrowalny operatorami tablicowymi
E-mailtext + CHECKadres sprawdzany przez bazę, otwierany jednym kliknięciem
Telefon, Kod kreskowy, Adrestextkrótki tekst i jego format: link do połączenia, czcionka o stałej szerokości, link do mapy
URLtext + CHECKuzupełniany przy wpisywaniu (exemple.fr → https://exemple.fr)
Osobauuidczłonek przestrzeni roboczej; wskazanie go powiadamia tę osobę
Autonumerbigint identitynumeruje też już istniejące wiersze; nikt go nie wpisuje
Relacjauuid + FOREIGN KEYprawdziwy klucz obcy do tabeli docelowej
Relacja wielokrotnauuid[]wiele powiązanych wierszy, których integralności pilnuje wyzwalacz
Formułakolumna generowana STOREDobliczana przez PostgreSQL – lub przy odczycie, zobacz Formuły
Odnośnik, Agregacja, Zliczaniebrakobliczane przy odczycie, przez relację
Przyciskbrakotwiera adres lub uruchamia automatyzację
Plik, Obrazjsonb (metadane)bajty trafiają do magazynu plików

Każda tabela ma też swoje kolumny systemowe: _id (UUID v7), _created_at, _updated_at, _created_by, _updated_by – utrzymywane przez wyzwalacz, nigdy niezapisywalne przez API. Siatka umieszcza je w grupie Informacje systemowe, w menu kolumn: są w każdej tabeli, a przydają się w nielicznych.

Siatka tabeli z obliczanym czasem trwania, odnośnikiem i zliczaniem

To, co obiecuje interfejs, gwarantuje PostgreSQL. Pojedynczy wybór to ograniczenie CHECK; relacja – FOREIGN KEY; URL lub adres e-mail – wyrażenie regularne. Zapis w bezpośrednim SQL, który je narusza, jest odrzucany tak samo jak w interfejsie:

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)

Waluta, Procent, Czas trwania, Ocena, Telefon, Kod kreskowy i Adres wybiera się jak typy, ale są to formaty: kolumna pozostaje liczbą lub tekstem, zmienia się tylko sposób odczytu.

FormatNaOdczyt i wprowadzanie
Walutaliczbie12 500,00 € – euro, dolar, funt, frank szwajcarski, dolar kanadyjski, jen
Procentliczbie15 %
Czas trwanialiczbie sekund1:30, a wprowadza się 1h30, 90 min
Ocenaliczbieod 1 do 10 gwiazdek, ustawiana jednym kliknięciem
Telefonkrótkim tekścielink do połączenia
Kod kreskowykrótkim tekścieczcionką o stałej szerokości
Adreskrótkim tekścielink do mapy; w szczegółach wiersza Znajdź adres proponuje odpowiadające adresy, zapisane w całości; umieszcza go widok Mapa

Format można zmienić później (Wyświetlanie w edycji pola), nie ruszając zapisanych wartości. Nie ogranicza on wartości: ocena 7 w skali 5 pozostaje 7.

W edycji pola Wartość domyślna ustala, co otrzymuje wiersz utworzony bez niej:

WybórNaUtworzony wiersz otrzymuje
Ustalona wartośćwiększości typówwybraną wartość – status „Nouveau”, priorytet 3
Dzisiejsza datadaciedzień jego utworzenia, w strefie czasowej danej osoby
Moment utworzeniadacie i godziniedokładną godzinę
Osoba, która tworzy wierszosobiekto go utworzył – „Responsable: ja”

Nowe szczegóły wiersza i formularze otwierają się już wypełnione; wyczyszczenie pola pozostawia je puste. Wartość domyślna obowiązuje przy każdym tworzeniu – interfejs, API, MCP, import, formularz udostępniony, automatyzacja –, także na polu, którego dana osoba nie może zmieniać: to reguła tabeli. Istniejące wiersze się nie zmieniają, a wstawienie przez bezpośredni SQL nie otrzymuje żadnej: stosuje ją basedb, nie kolumna.

Formułę pisze się po angielsku (nazwy francuskie też działają): pola w nawiasach kwadratowych, argumenty rozdzielone ,:

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

Edytor podpowiada pola do wstawienia i panel funkcji; błąd wskazuje pole lub znak, którego dotyczy.

RodzinaFunkcje
LogikaIF, IFBLANK, ISBLANK, AND, OR, NOT, TRUE, FALSE
LiczbyROUND, ABS, CEILING, FLOOR, MIN, MAX
TekstUPPER, LOWER, TRIM, LEFT, RIGHT, LEN, TEXT, VALUE
DatyYEAR, MONTH, DAY, WEEKDAY, DAYS, ADD_DAYS, DATE, TODAY, NOW
Operatory+ - * /, & do łączenia tekstu, = <> < <= > >=

Formuła staje się kolumną generowaną przez PostgreSQL: psql i twoje narzędzia czytają ją jak każdą inną. Formuła zależna od bieżącego dnia (TODAY(), NOW()) lub przytaczająca odnośnik albo agregację jest obliczana przy odczycie: można ją filtrować i sortować w basedb, ale nie istnieje w bezpośrednim SQL.

Formuła nie przytacza ani innej formuły, ani bezpośrednio relacji – robi to odnośnik. Wyodrębnianie lub zastępowanie fragmentu tekstu pojawi się później.

Trzy pola czytają przez relację, w jedną lub w drugą stronę – „klient projektu”, ale też „zadania powiązane przez Projekt”:

  • odnośnik przynosi wartość z powiązanego wiersza lub listę wartości: miasto klienta projektu;
  • agregacja liczy na powiązanych wierszach: liczbę wartości, sumę, średnią, minimum, maksimum – przychody klienta, średnią ocenę jego opinii;
  • zliczanie liczy powiązane wiersze: liczbę zadań projektu.

Są obliczane przy każdym odczycie, z uprawnieniami osoby czytającej: jeśli powiązana tabela jest dla ciebie zamknięta, to pole też. Można je filtrować i sortować. Podążają za jedną relacją, nie da się ich zapisywać, nie mają kolumny – więc nie istnieją w bezpośrednim SQL – i nie występują ani w imporcie, ani w formularzach, ani w historii.

Relacja łączy wiersz z wierszem innej tabeli tej samej bazy. Siatka wyświetla wartość wyświetlaną wiersza docelowego – kolumnę, którą wskazujesz jako taką dla jego tabeli – a filtry przechodzą przez relację (clients_id.ville eq "Lyon"). Wiersze wskazujące na dany wiersz są widoczne w jego szczegółach wiersza.

Zaznacz Wiele wierszy na rekord, a relacja stanie się wielokrotna: zadanie zależy od kilku zadań, artykuł należy do kilku kategorii. Powiązane wiersze wyświetlają się jako plakietki, wybiera się je przez wyszukiwanie i otwiera jednym kliknięciem ze szczegółów wiersza. Usunięcie wiersza docelowego usuwa go z list, które go przytaczały – albo jest odrzucane, jeśli tak wybierzesz. Działają filtry has_any, has_all i is_null, które również przechodzą przez relację (taches_ids.titre contains "logo"). Relacji wielokrotnej nie da się jeszcze sortować, grupować ani importować.

Pole Przycisk nie ma wartości: działa. Otwiera adres – https:// lub mailto:, który może przytaczać wiersz (mailto:{{E-mail}}) – albo uruchamia automatyzację wyzwalaną przyciskiem w tej samej tabeli. Wyświetla się w komórce, na karcie i w szczegółach wiersza.

Baza, tabela i pole mają opis, który można zmieniać bez migracji. Jest kopiowany do COMMENT ON czytanego przez psql, do generowanej dokumentacji i do tego, co agent czyta przez describe_table.

Tekst sformatowany to wariant HTML długiego tekstu, wybierany przy tworzeniu pola („Tekst sformatowany (HTML)”): nagłówki, pogrubienie, kursywa, podkreślenie, przekreślenie, listy, cytaty, kod, linki i separatory, w edytorze wizualnym. HTML jest oczyszczany przy zapisie, niezależnie od tego, czy pochodzi z interfejsu, API, serwera MCP czy importu, a ograniczenie CHECK dodatkowo odrzuca niebezpieczne konstrukcje zapisane bezpośrednio w SQL (<script>, atrybuty on…, javascript:). Bez obrazów, tabel i kolorów: to, czego baza by nie zachowała, nie jest oferowane.

Długi tekst – zwykły lub sformatowany – może przytaczać kolumnę swojego wiersza. Menu Kolumna w edytorze wstawia odwołanie w miejscu kursora: plakietkę w tekście sformatowanym, {{Ville}} w Markdownie.

Dostawa zaplanowana na {{Livraison}}, miejsce: {{Ville}}.

  • Kolumna przechowuje odwołanie w postaci zapisanej – {{ville}}, przez nazwę fizyczną: to właśnie czyta psql.
  • Wszędzie indziej – w siatce, szczegółach wiersza, API, serwerze MCP, widokach udostępnionych, automatyzacjach – tekst czyta się z wartością z wiersza: „Dostawa zaplanowana na 02/10/2026, miejsce: Lyon.” Zmiana miasta zmienia tekst.
  • Pojedynczy wybór czyta się przez jego etykietę, osobę przez jej imię i nazwisko, datę w twoim formacie; wartość wstawiona do tekstu sformatowanego nigdy nie jest znacznikami.
  • Kolumna, której czytający nie może odczytać, nie daje nic: ani wartości, ani nazwy.

Tekstu sformatowanego nie może wypełniać AI: model pisze tekst, a nie oczyszczony HTML.

Ekran Struktura bazy – w jej menu ⋯ na pasku bocznym – wyświetla tabele i ich pola: dodawanie, zmiana nazwy, oznaczanie jako wymagane, zmiana kolejności, opisywanie, wskazywanie pola wyświetlanego.

Ekran Struktura bazy

Zmiana struktury wymaga poziomu Zarządzanie. Bez niego ekran można przeglądać, ale nic nie proponuje: ani przycisku, ani ołówka, ani uchwytu – wymagalność i pole wyświetlane są podane, a nie oferowane. Serwer i tak odrzuca każdą zmianę; ekran nie udaje już, że ją przyjmuje.

Dodanie pola, zmiana nazwy czy typu przechodzi przez silnik migracji: plan w krokach, krótkie blokady i nazwana odmowa, gdy jakiejś danej nie da się przekonwertować.

Zmiana nazwy bazy, tabeli lub pola odbywa się w jednym oknie dialogowym. Etykieta zmienia się zawsze, bez migracji. Administrator widzi pod spodem „Zmień nazwę także w bazie danych: clients → comptes”: zaznaczona opcja zmienia też nazwę fizyczną i wyświetla analizę wpływu – zapytania, widoki SQL i automatyzacje, które przytaczają starą nazwę. Stara nazwa nadal jest obsługiwana przez alias zgodności – widok – do czasu zaktualizowania twoich zapytań.

Usunięcie niczego od razu nie kasuje: tabela lub baza zostaje odsunięta (zz_supprime_…) i pozostaje czytelna w SQL. Usuniętą bazę można przywrócić; przywracanie pojedynczej tabeli z interfejsu jest w planach. Ostateczne trwałe usunięcie jest zarezerwowane dla administracji, po trzydziestu dniach, i zaczyna się od sprawdzonego eksportu CSV.

basedb to wolne oprogramowanie tworzone przez Eodia, studio oprogramowania natywnie opartego na AI.