테이블과 필드
basedb의 모든 테이블은 PostgreSQL 테이블이고, 모든 필드는 타입이 지정된 열입니다. 입력한
레이블(“Échéance”)은 일정한 규칙의 슬러그화를 거쳐 읽기 쉬운 물리명(echeance)이 됩니다.
악센트를 없애고, 소문자로 바꾸고, 예약어는 피합니다.
| 타입 | PostgreSQL 열 | 참고 |
|---|---|---|
| 짧은 텍스트 | text | 한 줄 |
| 긴 텍스트 | text | Markdown: 그리드에는 일부만 표시, 마우스를 올리면 렌더링 결과, 전용 편집기. 열을 인용할 수 있음 |
| 서식 있는 텍스트 | text + CHECK | 쓸 때 정제되는 HTML, 비주얼 편집기에서 작성. 아래 참고 |
| 숫자 | numeric | 부동소수점을 쓰지 않으므로 금액에 오차가 생기지 않음 |
| 통화, 백분율, 기간, 평점 | numeric | 숫자와 그 표시 형식: 12,50 €, 15 %, 1:30, ★★★★☆ |
| 체크박스 | boolean | |
| 날짜 | date | |
| 날짜 및 시간 | timestamptz | 절대 시점, 읽는 사람의 시간대로 표시 |
| 단일 선택 | text + CHECK | 옵션마다 색상, 아이콘 또는 이미지 |
| 다중 선택 | text[] + CHECK | 배열 연산자로 필터링 가능 |
| 이메일 | text + CHECK | 데이터베이스가 검증하는 주소, 클릭 한 번으로 열림 |
| 전화번호, 바코드, 주소 | text | 짧은 텍스트와 그 형식: 전화 걸기 링크, 고정폭 글꼴, 지도로 가는 링크 |
| URL | text + CHECK | 입력할 때 자동 보완(exemple.fr → https://exemple.fr) |
| 사람 | uuid | 워크스페이스의 멤버. 지정하면 그 사람에게 알림이 감 |
| 자동 번호 | bigint identity | 이미 있는 행에도 번호를 매기며, 아무도 직접 입력하지 않음 |
| 관계 | uuid + FOREIGN KEY | 대상 테이블을 가리키는 실제 외래 키 |
| 다중 관계 | uuid[] | 여러 행을 연결하며, 무결성은 트리거가 유지 |
| 수식 | 생성 열 STORED | PostgreSQL이 계산하거나 읽을 때 계산. 수식 참고 |
| 조회, 롤업, 개수 | 없음 | 관계를 거쳐 읽을 때 계산 |
| 버튼 | 없음 | 주소를 열거나 자동화를 실행 |
| 파일, 이미지 | jsonb(메타데이터) | 바이트는 파일 저장소에 저장 |
모든 테이블에는 시스템 열도 있습니다. _id(UUID v7), _created_at, _updated_at,
_created_by, _updated_by이며, 트리거가 관리하고 API로는 절대 쓸 수 없습니다. 그리드에서는
열 메뉴의 시스템 정보 아래에 모여 있습니다. 모든 테이블에 있지만 쓸모 있는 경우는 드물기
때문입니다.

데이터베이스가 지키는 제약 조건
섹션 제목: “데이터베이스가 지키는 제약 조건”인터페이스가 약속하는 것을 PostgreSQL이 보장합니다. 단일 선택은 CHECK 제약 조건이고,
관계는 FOREIGN KEY, URL이나 이메일 주소는 정규식입니다. 이를 어기는 SQL 직접 쓰기는
인터페이스에서와 마찬가지로 거부됩니다.
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)표시 형식
섹션 제목: “표시 형식”통화, 백분율, 기간, 평점, 전화번호, 바코드, 주소는 타입처럼 고르지만 실제로는 형식입니다. 열은 숫자나 텍스트 그대로이고, 읽는 방식만 달라집니다.
| 형식 | 대상 | 표시와 입력 |
|---|---|---|
| 통화 | 숫자 | 12 500,00 € — 유로, 달러, 파운드, 스위스 프랑, 캐나다 달러, 엔 |
| 백분율 | 숫자 | 15 % |
| 기간 | 초 단위 숫자 | 1:30으로 표시하고, 1h30, 90 min으로 입력 |
| 평점 | 숫자 | 별 1~10개, 클릭 한 번으로 설정 |
| 전화번호 | 짧은 텍스트 | 전화 걸기 링크 |
| 바코드 | 짧은 텍스트 | 고정폭 글꼴 |
| 주소 | 짧은 텍스트 | 지도로 가는 링크; 행 세부 정보에서 주소 찾기가 전체 주소로 적힌, 일치하는 주소를 제안함; 지도 보기가 이 값으로 위치를 정함 |
형식은 나중에 바꿀 수 있으며(필드 편집의 표시), 저장된 값은 그대로 유지됩니다. 형식은 값을 제한하지도 않습니다. 5점 척도에서 7인 평점은 7로 남습니다.
기본값
섹션 제목: “기본값”필드 수정 화면에서 기본값은 값 없이 만들어진 행이 어떤 값을 받을지 정합니다.
| 선택 | 대상 | 새로 만든 행이 받는 값 |
|---|---|---|
| 고정 값 | 대부분의 타입 | 선택한 값 — 상태 “Nouveau”, 우선순위 3 |
| 오늘 날짜 | 날짜 | 만들어진 날, 그 사람의 시간대 기준 |
| 생성 시점 | 날짜 및 시간 | 정확한 시각 |
| 행을 생성하는 사람 | 사람 | 행을 만든 사람 — “담당자: 나” |
새 행 세부 정보와 양식은 미리 채워진 채로 열리며, 필드를 비우면 비워 둔 채로 남습니다. 기본값은 인터페이스, API, MCP, 가져오기, 공유 양식, 자동화를 포함한 모든 생성에 적용되며, 그 사람이 수정할 수 없는 필드에도 적용됩니다. 이는 테이블 자체의 규칙이기 때문입니다. 기존 행은 바뀌지 않으며, SQL을 직접 써서 넣은 행에는 기본값이 전혀 적용되지 않습니다. 기본값을 적용하는 것은 열이 아니라 basedb입니다.
수식은 영어로 작성하며(프랑스어 함수 이름도 사용할 수 있습니다), 필드는 대괄호로 감싸고 인수는 ,로 구분합니다.
ROUND([Montant HT] * (1 + [Taux de TVA]), 2)IF([Payée], FALSE, DAYS(TODAY(), [Échéance]) > 0)DAYS([Fin], [Début])편집기는 삽입할 필드와 함수 패널을 제공하며, 오류가 나면 문제가 된 필드나 문자를 알려 줍니다.
| 분류 | 함수 |
|---|---|
| 논리 | IF, IFBLANK, ISBLANK, AND, OR, NOT, TRUE, FALSE |
| 숫자 | ROUND, ABS, CEILING, FLOOR, MIN, MAX |
| 텍스트 | UPPER, LOWER, TRIM, LEFT, RIGHT, LEN, TEXT, VALUE |
| 날짜 | YEAR, MONTH, DAY, WEEKDAY, DAYS, ADD_DAYS, DATE, TODAY, NOW |
| 연산자 | + - * /, 텍스트를 이어 붙이는 &, = <> < <= > >= |
수식은 PostgreSQL의 생성 열이 됩니다. psql과 사용 중인 도구가 다른 열처럼 읽습니다.
날짜에 따라 달라지는 수식(TODAY(), NOW())이나 조회 또는 롤업을 인용하는
수식은 읽을 때 계산됩니다. basedb에서는 필터링하고 정렬할 수 있지만, SQL로 직접 접근하면
존재하지 않습니다.
수식은 다른 수식이나 관계를 직접 인용할 수 없습니다. 관계는 조회 필드를 통해 인용합니다. 텍스트의 일부를 추출하거나 바꾸는 기능은 나중에 추가됩니다.
조회, 롤업, 개수
섹션 제목: “조회, 롤업, 개수”세 가지 필드가 관계를 거쳐 어느 방향으로든 읽습니다. “프로젝트의 고객”뿐 아니라 “Projet 필드로 연결된 작업”도 읽을 수 있습니다.
- 조회는 연결된 행의 값 하나 또는 값 목록을 가져옵니다. 예: 프로젝트 고객의 도시.
- 롤업은 연결된 행으로 계산합니다. 값 개수, 합계, 평균, 최솟값, 최댓값. 예: 고객의 매출, 고객 후기의 평균 평점.
- 개수는 연결된 행을 셉니다. 예: 프로젝트의 작업 수.
이 필드들은 읽을 때마다 읽는 사람의 권한으로 계산됩니다. 연결된 테이블에 접근할 수 없으면 이 필드도 볼 수 없습니다. 필터링과 정렬이 가능합니다. 관계 하나만 따라가고, 쓸 수 없고, 열이 없으므로 SQL로 직접 접근할 수 없으며, 가져오기, 양식, 기록에도 나타나지 않습니다.
관계는 한 행을 같은 데이터베이스의 다른 테이블에 있는 행과 연결합니다. 그리드는 대상
행의 표시 값을 보여 줍니다. 표시 값은 대상 테이블에서 표시 필드로 지정한 열의 값입니다.
필터는 관계를 거쳐 적용됩니다(clients_id.ville eq "Lyon"). 어떤 행을 가리키는 행들은 그
행의 행 세부 정보에 표시됩니다.
레코드당 여러 행을 선택하면 관계가 다중 관계가 됩니다. 작업 하나가 여러 작업에
의존하거나, 글 하나가 여러 카테고리에 속하는 경우입니다. 연결된 행은 배지로 표시되고, 검색해서
고르며, 행 세부 정보에서 클릭 한 번으로 엽니다. 대상 행을 삭제하면 그 행을 인용하던 목록에서
빠지며, 그렇게 설정했다면 삭제가 거부됩니다. has_any, has_all, is_null 필터를 쓸 수
있고, 이 필터들도 관계를 거쳐 적용됩니다(taches_ids.titre contains "logo"). 다중 관계는
아직 정렬, 그룹화, 가져오기를 지원하지 않습니다.
버튼 필드에는 값이 없고 동작만 있습니다. 주소를 열거나(https:// 또는 mailto:,
행의 값을 인용 가능: mailto:{{E-mail}}) 같은 테이블에서 버튼으로 트리거되는 자동화를
실행합니다. 셀, 카드, 행 세부 정보에 표시됩니다.
데이터베이스, 테이블, 필드에는 설명을 달 수 있으며, 마이그레이션 없이 수정할 수 있습니다.
설명은 psql이 읽는 COMMENT ON, 자동 생성 문서, 에이전트가 describe_table로 읽는 내용에
복사됩니다.
서식 있는 텍스트와 변수
섹션 제목: “서식 있는 텍스트와 변수”서식 있는 텍스트는 긴 텍스트의 HTML 버전으로, 필드를 만들 때 선택합니다(“서식 있는
텍스트(HTML)”). 비주얼 편집기에서 제목, 굵게, 기울임꼴, 밑줄, 취소선, 목록, 인용, 코드, 링크,
구분선을 쓸 수 있습니다. HTML은 인터페이스, API, MCP 서버, 가져오기 중 어디에서 오든 쓸 때
정제되며, CHECK 제약 조건이 SQL로 직접 쓴 위험한 형식(<script>, on… 속성,
javascript:)도 거부합니다. 이미지, 표, 색상은 지원하지 않습니다. 데이터베이스가 보존하지
않을 것은 처음부터 제공하지 않습니다.
긴 텍스트는 일반이든 서식 있는 텍스트든 같은 행의 열을 인용할 수 있습니다. 편집기의
열 메뉴가 커서 위치에 인용을 삽입합니다. 서식 있는 텍스트에서는 배지로, Markdown에서는
{{Ville}}로 들어갑니다.
배송 예정:
{{Livraison}},{{Ville}}.
- 열에는 작성한 그대로의 인용, 즉 물리명으로 된
{{ville}}이 저장됩니다.psql이 읽는 것은 이 값입니다. - 그 밖의 모든 곳(그리드, 행 세부 정보, API, MCP 서버, 공유 보기, 자동화)에서는 텍스트가 행의 값으로 채워져 읽힙니다. “배송 예정: 2026. 10. 2., Lyon.” 도시를 바꾸면 텍스트도 바뀝니다.
- 단일 선택은 레이블로, 사람은 이름으로, 날짜는 사용자의 형식으로 읽힙니다. 서식 있는 텍스트에 삽입된 값은 절대 마크업이 되지 않습니다.
- 읽는 사람이 읽을 수 없는 열은 아무것도 보여 주지 않습니다. 값도, 이름도 나타나지 않습니다.
서식 있는 텍스트는 AI가 채울 수 없습니다. 모델은 텍스트를 쓰지, 정제된 HTML을 쓰지 않기 때문입니다.
스키마 변경
섹션 제목: “스키마 변경”데이터베이스의 스키마 화면(사이드바에서 데이터베이스의 ⋯ 메뉴)에는 테이블과 그 필드가 나열됩니다. 여기서 필드를 추가하고, 이름을 바꾸고, 필수로 지정하고, 순서를 바꾸고, 설명을 달고, 표시 필드를 지정합니다.

스키마를 변경하려면 관리 권한이 필요합니다. 이 권한이 없으면 화면을 볼 수만 있고 아무 기능도 제공되지 않습니다. 버튼도, 연필 아이콘도, 끌기 핸들도 없으며, 필수 여부와 표시 필드는 보여 주기만 하고 바꿀 수는 없습니다. 어차피 서버가 모든 변경을 거부하므로, 화면도 더 이상 받아들이는 척하지 않습니다.
필드 추가, 이름 바꾸기, 타입 변경은 마이그레이션 엔진을 거칩니다. 단계별 계획, 짧은 잠금, 그리고 데이터를 변환할 수 없을 때 이유를 밝히는 거부가 뒤따릅니다.
데이터베이스, 테이블, 필드의 이름 바꾸기는 대화 상자 하나에서 합니다. 레이블은 마이그레이션
없이 언제든 바뀝니다. 관리자에게는 그 아래에 “데이터베이스에서도 이름 바꾸기: clients →
comptes”가 표시됩니다. 이를 선택하면 물리명도 바뀌고, 영향 분석이 나타납니다. 이전 이름을
인용하는 쿼리, SQL 뷰, 자동화가 표시됩니다. 쿼리를 수정하는 동안에는 이전 이름도 호환성
별칭(뷰)으로 계속 제공됩니다.
삭제해도 바로 지워지지는 않습니다. 테이블이나 데이터베이스는 한쪽으로 옮겨지고
(zz_supprime_…) SQL로 계속 읽을 수 있습니다. 삭제된 데이터베이스는 복원할 수 있으며, 테이블
하나만 인터페이스에서 되살리는 기능은 추가 예정입니다. 완전한
영구 삭제는 30일이 지난 뒤 시스템 관리에서만 할 수 있으며, 먼저 검증된 CSV 내보내기를
수행합니다.
basedb는 AI 네이티브 소프트웨어 스튜디오 Eodia가 만든 자유 소프트웨어입니다.