# Guide Technique — Databases, Views & Tasks Notion → FlowDeck > **Version:** 2.0 · **Date:** 2026-07-20 > **Auteur:** Hermes-Deepin · **Cible:** FlowDeck v4.0.x+ > **Sources:** [Notion Help — Databases](https://www.notion.com/help/category/databases), [Database Views](https://www.notion.com/help/category/database-views), [Tasks & Dependencies](https://www.notion.com/help/tasks-and-dependencies), [Sprints](https://www.notion.com/help/sprints), [Data Sources](https://www.notion.com/help/data-sources-and-linked-databases), [docs/Guide_Complet_Notion_database.md](Guide_Complet_Notion_database.md) --- ## Table des matières 1. [Introduction : les 3 piliers Notion](#1-introduction) 2. [Anatomy d'une Database Notion](#2-anatomy-database) 3. [Les propriétés (Database Properties)](#3-propriétés) 4. [Les relations et rollups](#4-relations-rollups) 5. [Les formules (Formulas)](#5-formules) 6. [Templates de database](#6-templates) 7. [Les Database Views (10 types)](#7-views) 8. [Filtres, tris & regroupements](#8-filtres-tris-groupes) 9. [Data Sources & Linked Databases](#9-data-sources) 10. [Tasks, Sub-items, Dependencies & Sprints](#10-tasks) 11. [My Tasks — vue unifiée](#11-my-tasks) 12. [Dashboards](#12-dashboards) 13. [Modèle de données FlowDeck](#13-modèle-de-données) 14. [Plan d'implémentation (5 phases)](#14-plan-implémentation) 15. [Limites Notion à respecter](#15-limites) 16. [Références](#16-références) --- ## 1. Introduction : les 3 piliers Notion {#1-introduction} Notion repose sur 3 concepts fondamentaux interconnectés : ``` ┌─────────────────────────────────────────────────────────────────┐ │ NOTION │ │ │ │ ┌─────────────────────┐ ┌─────────────────────┐ │ │ │ DATABASES │ │ DATABASE VIEWS │ │ │ │ │ │ │ │ │ │ • Collections de │ │ • 10 types de vues │ │ │ │ pages │ │ • Filtres/Tris/ │ │ │ │ • Propriétés typées │ │ Groupes │ │ │ │ • Relations/Rollups │ │ • Layouts & │ │ │ │ • Formules │ │ Dashboards │ │ │ │ • Templates │ │ • Charts/Graphiques │ │ │ └──────────┬──────────┘ └──────────┬──────────┘ │ │ │ │ │ │ └────────┬───────────────┘ │ │ ▼ │ │ ┌─────────────────────────────────────────────────────────────┐ │ │ │ TASKS │ │ │ │ • Sub-items (parent_id auto-référencé) │ │ │ │ • Dependencies (bloque/bloqué par) │ │ │ │ • Sprints (planification agile) │ │ │ │ • My Tasks (vue unifiée cross-databases) │ │ │ └─────────────────────────────────────────────────────────────┘ │ └─────────────────────────────────────────────────────────────────┘ ``` ### État actuel FlowDeck (v4.0.x) ``` ✅ Workspaces → workspaces, workspace_members ✅ Pages + Arbre → pages (parent_id, sort_order) ✅ Block Editor → content_format='blocks', JSON blocks ✅ Sidebar Notion → Recents, Favorites, Shared, Published, Private ✅ Library multi-onglets → library.html + /api/library/* ✅ Share / Publish → page_shares, share_mode, publish_slug ✅ Recents tracking → recents table ✅ Tags → tags, page_tags ✅ Gitea / GitHub OAuth → auth_method, OAuth tokens ⚠️ Collections (ébauche) → collections, collection_pages ⚠️ Collection Properties (ébauche) → collection_properties (21 types définis) ⚠️ Collection Views (ébauche) → collection_views (structure partielle) ❌ Database multi-sources → ABSENT (data_sources concept) ❌ Full-page vs Inline databases → ABSENT ❌ Charts, Forms, Maps, Feed → ABSENT ❌ Dashboards → ABSENT (combinaison de vues) ❌ Templates de database → ABSENT (database_templates ébauche) ❌ Tasks / Sub-items → ABSENT ❌ Dependencies / Sprints → ABSENT ❌ My Tasks (cross-DB unifié) → ABSENT (/my-tasks ébauche statique) ``` --- ## 2. Anatomy d'une Database Notion {#2-anatomy-database} ### 2.1 Concept fondamental Une **Database Notion** est une **collection de pages**, chaque ligne/élément étant une **page Notion complète** — ouvrable et éditable comme n'importe quelle page (texte, images, sous-pages, embeds…). | Concept | Définition | |---------|-----------| | **Database** | Conteneur global : 1+ data sources + 1+ vues | | **Data source** | Un ensemble de pages liées. Chaque DB a ≥ 1 source | | **Page / Item** | Une ligne = une page Notion complète, éditable | | **Property** | Champ de métadonnées (date, statut, personne…) | | **View** | Fenêtre d'affichage sur les données (table, board, etc.) | ### 2.2 Full-page vs Inline | Type | Comportement | |------|-------------| | **Full-page** | Apparaît comme une page dans la sidebar, peut être verrouillée | | **Inline** | Intégrée dans une page existante, contrôles masqués au survol, peut être étendue | **Transformations :** - Inline → Full-page : cliquer sur **⤡** (étendre) ou glisser vers la sidebar - Full-page → Inline : glisser dans une autre page → `⋮⋮` → Turn into inline ### 2.3 Création d'une database 1. **New page** → sous *Get started with*, sélectionner **Table** (ou `•••` → Database) 2. **Slash command** : `/database` dans une page existante 3. **Options** : New empty / Link to existing data / Build with AI / Template **Premières étapes :** 1. Créer une page → bouton **New page** 2. Ajouter une propriété → **Add property** 3. Ajouter une vue → par défaut Table view, puis autant que souhaité 4. Éditer la vue → nom, layout, propriétés visibles, filtres, tris, groupes --- ## 3. Les propriétés (Database Properties) {#3-propriétés} ### 3.1 Types disponibles (20 types) | # | Propriété | Usage | Value format | |---|-----------|-------|-------------| | 1 | **Text** | Texte formaté (notes, descriptions) | String | | 2 | **Number** | Nombre, format devise ou barre de progression | Float + format | | 3 | **Select** | Une option parmi une liste de tags | String | | 4 | **Status** | Progression : To-do, In Progress, Complete | String | | 5 | **Multi-Select** | Plusieurs tags/catégories | Array[String] | | 6 | **Date** | Date ou plage de dates (heure optionnelle) | ISO 8601 / range | | 7 | **Formula** | Calculs basés sur d'autres propriétés | Expression → Dynamic | | 8 | **Relation** | Connexion entre databases | FK référence | | 9 | **Rollup** | Agrégation d'infos via une relation | Dynamic (count/sum/avg…) | | 10 | **Person** | Assigner une personne/groupe | User ref | | 11 | **File** | Upload de fichiers et images | File metadata | | 12 | **Checkbox** | Booléen | Boolean | | 13 | **URL** | Lien web cliquable | String (URL) | | 14 | **Email** | Adresse email (ouvre client mail) | String (email) | | 15 | **Phone** | Numéro de téléphone | String (phone) | | 16 | **Created time** | Auto-généré, non éditable | Timestamp | | 17 | **Created by** | Auto-généré, non éditable | User ref | | 18 | **Last edited time** | Auto-mis à jour | Timestamp | | 19 | **Last edited by** | Auto-mis à jour | User ref | | 20 | **Button** | Automatiser des actions (v5.0) | Action config | | 21 | **ID** | Identifiant unique, immuable | Auto-incrément | | 22 | **Place** | Localisation (services, nom, adresse) | Geo + text | > ⚠️ Limite : 500 propriétés max par database. ### 3.2 Gestion des propriétés - **Créer** : `Add property` ou `+` à droite → nom + type - **Éditer** : menu ⚙️ → Edit properties - **Masquer** : cliquer l'icône 👁️ - **Réordonner** : drag & drop - **Dupliquer** : `•••` → Duplicate property (ne duplique pas les valeurs) - **Supprimer** : supprime définitivement la propriété et toutes ses valeurs --- ## 4. Relations & Rollups {#4-relations-rollups} ### 4.1 Relations Une **relation** connecte les pages de deux databases (ou d'une database à elle-même). ``` ┌──────────────────────┐ ┌──────────────────────┐ │ Customers │ │ Deals │ │ │────────▶│ │ │ id, name, email │ related │ id, amount, stage │ │ │◀────────│ │ └──────────────────────┘ └──────────────────────┘ ``` **Config :** - **1-way** (par défaut) ou **2-way** (bidirectionnelle) - **Limit** : nombre de pages liées (1 ou illimité) - **Property visibility** : Always show / Hide when empty / Always hide - **Relation vers soi-même** : ex. tâches liées entre elles (dependencies) ### 4.2 Rollups Un **rollup** agrège les données issues d'une relation selon une fonction : | Fonction | Description | |----------|-------------| | `count` | Nombre d'éléments liés | | `count values` | Nombre de valeurs non vides | | `count unique values` | Nombre de valeurs uniques | | `count empty` | Nombre de valeurs vides | | `percent empty` | % de valeurs vides | | `percent not empty` | % de valeurs non vides | | `sum` | Somme | | `average` | Moyenne | | `min` / `max` | Valeur min / max | | `range` | Intervalle (max - min) | | `earliest date` / `latest date` | Date la plus ancienne / récente | | `show original` | Affiche la valeur brute | > ⚠️ **Pas de rollup d'un rollup** (anti-boucle). --- ## 5. Formules (Formulas) {#5-formules} Une propriété **Formula** exécute des calculs via le langage de formules Notion. ### 5.1 Éléments du langage ``` Properties : prop("Nom") Math : + - * / % ^ Booléens : true, false Comparaison : ==, !=, <, <=, >, >= Logiques : and, or, not Ternaire : X ? Y : Z (équivaut à if(X, Y, Z)) ``` ### 5.2 Fonctions courantes `if()`, `ifs()`, `empty()`, `length()`, `substring()`, `contains()`, `replace()`, `lower()`, `upper()`, `style()`, `format()`, `formatDate()`, `now()`, `today()`, `dateAdd()`, `dateBetween()`, `.first()`, `.last()`, `.every()`, `.filter()`, `.map()`, `.at()`, `round()`, `ceil()`, `floor()`, `min()`, `max()`, `sum()`, `mean()`, `median()`, `join()`, `toNumber()`, `toString()`, `concat()`, `id()`, `let()`… ### 5.3 Exemples ```notion // Due date = date de début + 2 semaines dateAdd(Start Date, 2, "week") // Marquer "Overdue" en rouge/gras si dépassé et non terminé if(and(now() > Due Date, Status != "Done"), style("Overdue", "red", "b"), "") // Nombre de tâches liées Tasks.length() // Priorité calculée à partir de l'impact et l'effort if(and(Impact == "High", Effort == "Low"), "🔥 Quick win", "Normal") // Calcul du CA journalier prop("Prix unitaire") * prop("Quantité") ``` --- ## 6. Templates de database {#6-templates} Permettent de répliquer une structure de page en un clic. **Créer :** 1. Flèche déroulante à côté de **New** → **+ New template** 2. Nommer le template 3. Prédéfinir propriétés (ex. Priority = P1) et contenu (texte, images, embeds) **Fonctionnalités :** - **Récurrence** : quotidienne, hebdomadaire, mensuelle, annuelle - **Nesting max** : 3 niveaux (sauf template quotidien → pas de nesting) > ⚠️ Templates propres à chaque database. Ne pas pré-remplir les relations dans un template (sinon toutes les pages pointeront sur la même cible). --- ## 7. Les Database Views {#7-views} Une **vue** est une fenêtre d'affichage sur les données. Chaque vue possède ses propres filtres, tris, groupes et propriétés visibles — **indépendants** de la database source. ### 7.1 Les 10 types de vues | # | Vue | Idéal pour | Caractéristique | |---|-----|-----------|-----------------| | 1 | **Table** | Données structurées, aperçu complet | Lignes × colonnes, calculs en bas de colonne | | 2 | **Board (Kanban)** | Workflows, gestion de tâches | Colonnes regroupées par propriété, cartes | | 3 | **Timeline** | Planification, dépendances | Chronologie horizontale type Gantt | | 4 | **Calendar** | Événements, deadlines | Basé sur propriété Date, vues jour/semaine/mois | | 5 | **List** | Notes, docs, lecture simple | Minimaliste et épurée | | 6 | **Gallery** | Moodboards, portfolios | Cartes visuelles avec aperçu image | | 7 | **Chart** | Analyse, reporting | Barres, courbes, camemberts, donuts, scatter | | 8 | **Form** | Collecte de données, sondages | Formulaire de saisie → crée pages | | 9 | **Map** | Lieux, adresses | Géolocalisation (propriété Place) | | 10 | **Feed** | Mises à jour, annonces | Flux de contenu type actualité | ### 7.2 Ajouter une vue 1. Cliquer **+** à côté des onglets de vues existants 2. Choisir le type de layout 3. Donner un nom 4. Configurer : propriétés visibles, filtres, tris, groupes, layout ### 7.3 Layouts personnalisables Chaque vue possède des options de **layout** : - **Card size** : small / medium / large (board, gallery) - **Card preview** : page cover / page content / none - **Properties** : choisir lesquelles afficher sur les cartes - **Open pages in** : center peek / side peek / full page --- ## 8. Filtres, tris & regroupements {#8-filtres-tris-groupes} ### 8.1 Filtres Affichent uniquement les éléments correspondant à des critères. **Structure :** ``` ┌─ Filter group (AND) │ ├─ Status = "In Progress" │ ├─ Due Date is within this week │ └─ Filter group (OR) │ ├─ Priority = "P1" │ └─ Priority = "P2" ``` **Opérateurs disponibles :** `is`, `is not`, `contains`, `does not contain`, `starts with`, `ends with`, `is empty`, `is not empty`, `is before`, `is after`, `is within`, `is today`, `is this week` ### 8.2 Tris Ordonnent les éléments. Multi-niveaux (ex. trier par Status ASC puis Due Date DESC). ### 8.3 Regroupements (Groups) Regroupent visuellement les éléments par propriété : - **Group** (principal), **Sub-group** (secondaire, surtout en board) - Exemples : par Status, par Assignee, par Date (mois/semaine) --- ## 9. Data Sources & Linked Databases {#9-data-sources} ### 9.1 Concept Chaque database a ≥ 1 **data source**. Une database peut en regrouper **plusieurs**. ``` ┌──────────────────────────────────────────────────────────┐ │ DATABASE (CRM tout-en-un) │ │ │ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ │ │ Contacts │ │Entreprises│ │ Deals │ │Activités │ │ │ │ (source) │ │ (source) │ │ (source) │ │ (linked) │ │ │ └──────────┘ └──────────┘ └──────────┘ └──────────┘ │ └──────────────────────────────────────────────────────────┘ ``` ### 9.2 Databases liées Une **linked database** est une copie d'une database existante qui : - Peut avoir ses propres vues/filtres/tris/**sans affecter l'originale** - Mais l'édition du contenu/titres/propriétés **est répercutée** sur la source - L'accès respecte celui de la database originale --- ## 10. Tasks, Sub-Items, Dependencies & Sprints {#10-tasks} ### 10.1 Task Database Une database standard avec des **propriétés obligatoires** : - **Status** (To-do, In Progress, Done) - **Assignee** (Person) - **Due Date** (Date) **Activation :** ⚙️ → More settings → **Turn into Tasks** Effets : - Les tâches assignées apparaissent dans **My Tasks** (widget Home) - Propriété **ID** auto-générée (format `TASK-123`) - URL directe : `notion.so/TASK-123` - Fonctionnalités Sprints débloquées ### 10.2 Sub-items Permettent de découper une tâche en sous-tâches, visibles dans toutes les vues. **Activation :** ⚙️ → More settings → Sub-items → Turn on **Modes d'affichage :** - **Nested in toggle** — arborescence pliable (défaut) - **Flattened list** — liste plate indentée - **Card property** — affichée sur la carte parente **Filtres :** Parents only / Parents and sub-items / Sub-items only ### 10.3 Dependencies Relient les tâches de façon linéaire (`A bloque B`). **Calendrier automatique :** - Shift only when dates overlap - Shift & maintain time between items - Do not automatically shift **Éviction des week-ends** : configurable. ### 10.4 Sprints Nécessitent une **Task database** préalable. **Activation :** ⚙️ → More settings → Sprints → Turn on sprints **Éléments :** - **Sprint board** : 3 colonnes (Current Sprint / Sprint planning / Backlog) - **Sprints database** : vue globale + Timeline - **Réglages** : durée (1-8 semaines), jour de début, gestion incomplètes, complétion auto - **Vélocité** : suivi de la capacité de l'équipe --- ## 11. My Tasks — vue unifiée {#11-my-tasks} ### 11.1 Qu'est-ce que My Tasks ? **My Tasks** agrège **toutes les tâches assignées à l'utilisateur** à travers **toutes les databases** du workspace, dans une vue unique. Pas besoin de naviguer dans chaque database pour trouver ses tâches — tout est consolidé. ### 11.2 Fonctionnement 1. Une database est marquée comme **Task database** 2. L'utilisateur est assigné à certaines pages (propriété **Person**) 3. Ces pages apparaissent automatiquement dans **My Tasks** 4. Filtrage possible : aujourd'hui, overdue, next 7 days, par collection ### 11.3 Interface ``` ┌─────────────────────────────────────────────┐ │ 📋 My Tasks │ │ │ │ [All] [Today] [Overdue] [Next 7 days] │ │ │ │ ── Collection A (3) ── │ │ ┌──────────────────────────────────────────┐ │ │ │ 📋 Tâche 1 ⏳ In Progress 15 juil │ │ │ │ 📋 Tâche 2 ✅ Done 10 juil │ │ │ │ 📋 Tâche 3 📝 Todo — │ │ │ └──────────────────────────────────────────┘ │ │ │ │ ── Collection B (1) ── │ │ ┌──────────────────────────────────────────┐ │ │ │ 📋 Tâche 4 🚀 P1 20 juil │ │ │ └──────────────────────────────────────────┘ │ │ │ │ 4 tasks across 2 collections │ └─────────────────────────────────────────────┘ ``` ### 11.4 API nécessaire ``` GET /my-tasks?view=all|today|overdue|upcoming&days=7 → Retourne toutes les pages de type tâche assignées à l'utilisateur → Groupées par collection → Avec statut, due date, priorité ``` --- ## 12. Dashboards {#12-dashboards} Transforment une database en **tableau de bord** centralisé en combinant plusieurs vues/widgets sur une même page. ``` ┌──────────────────────────────────────────────────────────┐ │ DASHBOARD — Suivi Projet │ │ │ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────────────┐ │ │ │ 📊 Chart │ │ 📊 Chart │ │ 📋 Board (Kanban) │ │ │ │ Burn-down │ │ Status │ │ Current Sprint │ │ │ │ │ │ répartition │ │ │ │ │ └─────────────┘ └─────────────┘ └─────────────────────┘ │ │ │ │ ┌─────────────────────────────────────────────────────┐ │ │ │ 📅 Calendar — Échéances du mois │ │ │ └─────────────────────────────────────────────────────┘ │ └──────────────────────────────────────────────────────────┘ ``` --- ## 13. Modèle de données FlowDeck {#13-modèle-de-données} ### 13.1 Tables existantes (v4.0) — à conserver ```sql -- Collections (existantes, à enrichir) CREATE TABLE collections ( id INTEGER PRIMARY KEY AUTOINCREMENT, workspace_id INTEGER REFERENCES workspaces(id), name TEXT NOT NULL, description TEXT DEFAULT '', icon TEXT DEFAULT '📋', schema_json TEXT NOT NULL DEFAULT '[]', -- propriétés gitea_owner TEXT, gitea_repo TEXT, is_locked BOOLEAN NOT NULL DEFAULT 0, is_inline BOOLEAN NOT NULL DEFAULT 0, parent_page_id INTEGER REFERENCES collection_pages(id), created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, created_by INTEGER REFERENCES users(id), UNIQUE(workspace_id, name) ); -- Pages dans une collection CREATE TABLE collection_pages ( id INTEGER PRIMARY KEY AUTOINCREMENT, collection_id INTEGER NOT NULL REFERENCES collections(id) ON DELETE CASCADE, title TEXT NOT NULL DEFAULT '', icon TEXT DEFAULT '📄', position INTEGER NOT NULL DEFAULT 0, parent_id INTEGER REFERENCES collection_pages(id), -- sub-items gitea_issue_id INTEGER, gitea_issue_number INTEGER, property_values_json TEXT NOT NULL DEFAULT '{}', -- valeurs des propriétés created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, created_by INTEGER REFERENCES users(id), updated_by INTEGER REFERENCES users(id) ); -- Vues d'une collection CREATE TABLE collection_views ( id INTEGER PRIMARY KEY AUTOINCREMENT, collection_id INTEGER NOT NULL REFERENCES collections(id) ON DELETE CASCADE, name TEXT NOT NULL DEFAULT 'Default View', view_type TEXT NOT NULL DEFAULT 'table', config_json TEXT NOT NULL DEFAULT '{}', position INTEGER NOT NULL DEFAULT 0, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); -- Propriétés d'une collection CREATE TABLE collection_properties ( id INTEGER PRIMARY KEY AUTOINCREMENT, collection_id INTEGER NOT NULL REFERENCES collections(id) ON DELETE CASCADE, name TEXT NOT NULL, prop_type TEXT NOT NULL DEFAULT 'text', options_json TEXT DEFAULT '[]', number_format TEXT DEFAULT 'number', related_collection_id INTEGER REFERENCES collections(id), reverse_name TEXT, relation_property_id INTEGER REFERENCES collection_properties(id), target_property_id INTEGER REFERENCES collection_properties(id), rollup_function TEXT, formula_expression TEXT, position INTEGER NOT NULL DEFAULT 0, required BOOLEAN NOT NULL DEFAULT 0, visible_in_views BOOLEAN NOT NULL DEFAULT 1, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, UNIQUE(collection_id, name) ); ``` ### 13.2 Nouvelles tables — Database Views enrichies ```sql -- Dashboard : combinaison de vues/widgets sur une page CREATE TABLE collection_dashboards ( id INTEGER PRIMARY KEY AUTOINCREMENT, collection_id INTEGER NOT NULL REFERENCES collections(id) ON DELETE CASCADE, name TEXT NOT NULL DEFAULT 'Dashboard', layout_json TEXT NOT NULL DEFAULT '{"columns":1,"widgets":[]}', -- [{view_id, x, y, width, height}, ...] created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); -- Templates de collection CREATE TABLE collection_templates ( id INTEGER PRIMARY KEY AUTOINCREMENT, collection_id INTEGER NOT NULL REFERENCES collections(id) ON DELETE CASCADE, name TEXT NOT NULL DEFAULT 'Default', description TEXT DEFAULT '', property_defaults_json TEXT NOT NULL DEFAULT '{}', content_json TEXT DEFAULT '[]', is_recurring BOOLEAN NOT NULL DEFAULT 0, recurrence_rule TEXT, -- 'daily', 'weekly', 'monthly', 'yearly' created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); -- Data sources multiples par collection CREATE TABLE collection_data_sources ( id INTEGER PRIMARY KEY AUTOINCREMENT, collection_id INTEGER NOT NULL REFERENCES collections(id) ON DELETE CASCADE, source_collection_id INTEGER NOT NULL REFERENCES collections(id), source_name TEXT, -- nom d'affichage dans la DB composite is_linked BOOLEAN NOT NULL DEFAULT 0, -- 1 = linked (provient d'ailleurs) position INTEGER NOT NULL DEFAULT 0, UNIQUE(collection_id, source_collection_id) ); -- Dependencies entre pages (tâches) CREATE TABLE page_dependencies ( id INTEGER PRIMARY KEY AUTOINCREMENT, page_id INTEGER NOT NULL REFERENCES collection_pages(id) ON DELETE CASCADE, dependency_id INTEGER NOT NULL REFERENCES collection_pages(id) ON DELETE CASCADE, dependency_type TEXT NOT NULL DEFAULT 'blocks', -- blocks | blocked_by | related auto_shift TEXT DEFAULT 'overlap', -- overlap | maintain_time | never created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, UNIQUE(page_id, dependency_id) ); -- Sprints CREATE TABLE sprints ( id INTEGER PRIMARY KEY AUTOINCREMENT, collection_id INTEGER NOT NULL REFERENCES collections(id) ON DELETE CASCADE, name TEXT NOT NULL, start_date TEXT NOT NULL, end_date TEXT NOT NULL, goal TEXT DEFAULT '', status TEXT NOT NULL DEFAULT 'planning', -- planning | active | completed auto_complete BOOLEAN NOT NULL DEFAULT 1, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); CREATE TABLE sprint_pages ( id INTEGER PRIMARY KEY AUTOINCREMENT, sprint_id INTEGER NOT NULL REFERENCES sprints(id) ON DELETE CASCADE, page_id INTEGER NOT NULL REFERENCES collection_pages(id) ON DELETE CASCADE, status_at_start TEXT, -- snapshot du statut au début du sprint velocity_points INTEGER DEFAULT 1, UNIQUE(sprint_id, page_id) ); ``` ### 13.3 Diagramme des relations clés ``` collections ──1:N── collection_pages ── self-ref ── parent_id (sub-items) │ │ │1:N │N:N ▼ ▼ collection_views page_dependencies (bloque/bloqué par) │ │1:N ▼ collection_properties │ │ self-ref ├── related_collection_id (relation) ├── relation_property_id (rollup) └── target_property_id (rollup) collections ──1:N── collection_data_sources (multi-sources) collections ──1:N── collection_templates collections ──1:N── sprints ──1:N── sprint_pages collections ──1:N── collection_dashboards ``` --- ## 14. Plan d'implémentation (5 phases) {#14-plan-implémentation} ### Phase 1 — Data Sources & Linked Databases (v4.1.0) **Objectif :** Permettre à une collection d'avoir plusieurs sources de données et des vues liées. ``` ✅ Table collection_data_sources ✅ API: POST /db/{id}/sources (add) ✅ API: DELETE /db/{id}/sources/{sid} (remove) ✅ API: POST /db/{id}/linked (créer une linked DB) ✅ UI: Data source manager dans settings database ✅ Règle: les linked DB héritent des permissions de la source ``` ### Phase 2 — Templates & Dashboard (v4.2.0) **Objectif :** Templates réutilisables + combinaison de vues en dashboard. ``` ✅ Table collection_templates (avec récurrence) ✅ Table collection_dashboards (layout widgets) ✅ API: templates CRUD ✅ API: POST /db/{id}/templates/{tid}/apply ✅ API: dashboards CRUD ✅ UI: Dashboard view (grille configurable de widgets) ✅ UI: Template picker dans le dropdown New ``` ### Phase 3 — Database Views complètes (v4.3.0) **Objectif :** Compléter les 10 types de vues avec leurs layouts. ``` ✅ Charts: barres, courbes, camemberts, donuts, scatter (morris.js / chart.js) ✅ Form: formulaire HTML → POST création page ✅ Map: intégration Leaflet pour propriété Place ✅ Feed: vue chronologique type fil d'actualité ✅ Timeline/Gantt: barres horizontales avec dépendances ✅ Layout options: card size, card preview, open in peek/side/full ✅ View tabs: navigation fluide entre vues ``` ### Phase 4 — Tasks, Sub-items & Dependencies (v4.4.0) **Objectif :** Implémenter le système complet de gestion de tâches Notion-style. ``` ✅ Flag is_task sur collections (Turn into Tasks) ✅ Sub-items: parent_id dans collection_pages (existant, à enrichir) ✅ Propriété ID auto-générée (TASK-XXX) ✅ Table page_dependencies (bloque/bloqué par) ✅ API: POST/GET/DELETE /db/{c}/pages/{p}/dependencies ✅ Auto-shift des dates (overlap / maintain_time / never) ✅ UI: vue dépendances (graphe ou liste), toggle sub-items ✅ Filtres sub-items: parents only / all / sub-items only ``` ### Phase 5 — Sprints & My Tasks (v4.5.0) **Objectif :** Sprints agiles + vue My Tasks cross-databases. ``` ✅ Tables sprints, sprint_pages ✅ API: sprints CRUD + assignation pages aux sprints ✅ Sprint board: Current Sprint / Planning / Backlog ✅ Vélocité: calcul points/burndown chart ✅ My Tasks: agrégation cross-databases ✅ My Tasks API: /my-tasks?view=all|today|overdue|upcoming ✅ My Tasks UI: groupes par collection, status badges ✅ Assignee property sync avec users FlowDeck ``` --- ## 15. Limites Notion à respecter {#15-limites} | Limite | Valeur | |--------|--------| | Propriétés max par database | 500 | | Pas de rollup d'un rollup | ✅ À respecter | | Pages avant indexation non linéaire | ~1 000 | | Nesting templates | max 3 niveaux | | Nesting template quotidien | interdit | | Templates | propres à chaque database | | Database liée : partage | nécessite accès à l'originale | --- ## 16. Références {#16-références} **Documentation Notion officielle :** - [Intro to databases](https://www.notion.com/help/intro-to-databases) - [Database properties](https://www.notion.com/help/database-properties) - [Relations & rollups](https://www.notion.com/help/relations-and-rollups) - [Formulas](https://www.notion.com/help/formulas) - [Formula syntax](https://www.notion.com/help/formula-syntax) - [Database templates](https://www.notion.com/help/database-templates) - [Tasks & dependencies](https://www.notion.com/help/tasks-and-dependencies) - [Sprints](https://www.notion.com/help/sprints) - [Data sources & linked databases](https://www.notion.com/help/data-sources-and-linked-databases) - [Views, filters & sorts](https://www.notion.com/help/views-filters-and-sorts) - [Tables](https://www.notion.com/help/tables), [Boards](https://www.notion.com/help/boards), [Timelines](https://www.notion.com/help/timelines) - [Calendars](https://www.notion.com/help/calendars), [Lists](https://www.notion.com/help/lists), [Galleries](https://www.notion.com/help/galleries) - [Charts](https://www.notion.com/help/charts), [Forms](https://www.notion.com/help/forms), [Maps](https://www.notion.com/help/maps) - [Feeds](https://www.notion.com/help/feeds), [Layouts](https://www.notion.com/help/layouts), [Dashboards](https://www.notion.com/help/dashboards) - [My Tasks with Task databases](https://www.notion.com/help/guides/give-your-to-dos-a-home-with-task-databases) **Documents FlowDeck :** - [Guide Complet Notion Database](Guide_Complet_Notion_database.md) - [Architecture FlowDeck v4.0](../ARCHITECTURE.md) - [Roadmap](../ROADMAP.md) - [FlowDeck Agent Integration](Flowdeck_Agent_integration.md)