Back to skills
SkillHub ClubShip Full StackFull StackIntegration

understanding-db-schema

Imported from https://github.com/C0ntr0lledCha0s/claude-code-plugin-automations.

Packaged view

This page reorganizes the original catalog entry around fit, installability, and workflow context first. The original raw source lives below.

Stars
3
Hot score
80
Updated
March 20, 2026
Overall rating
C3.2
Composite score
3.2
Best-practice grade
B81.2

Install command

npx @skill-hub/cli install c0ntr0lledcha0s-claude-code-plugin-automations-understanding-db-schema

Repository

C0ntr0lledCha0s/claude-code-plugin-automations

Skill path: logseq-expert/skills/understanding-db-schema

Imported from https://github.com/C0ntr0lledCha0s/claude-code-plugin-automations.

Open repository

Best for

Primary workflow: Ship Full Stack.

Technical facets: Full Stack, Integration.

Target audience: everyone.

License: Unknown.

Original source

Catalog source: SkillHub Club.

Repository owner: C0ntr0lledCha0s.

This is still a mirrored public skill entry. Review the repository before installing into production workflows.

What it helps with

  • Install understanding-db-schema into Claude Code, Codex CLI, Gemini CLI, or OpenCode workflows
  • Review https://github.com/C0ntr0lledCha0s/claude-code-plugin-automations before adding understanding-db-schema to shared team environments
  • Use understanding-db-schema for development workflows

Works across

Claude CodeCodex CLIGemini CLIOpenCode

Favorites: 0.

Sub-skills: 0.

Aggregator: No.

Original source / Raw SKILL.md

---
name: understanding-db-schema
version: 1.0.0
description: >
  Deep expertise in Logseq's Datascript database schema. Auto-invokes when users ask about
  Logseq DB schema, Datascript attributes, built-in classes, property types, entity relationships,
  schema validation, or the node/block/page data model. Provides authoritative knowledge of
  the DB graph architecture.
allowed-tools: Read, Grep, Glob, WebFetch, WebSearch
---

# Understanding Logseq DB Schema

## When to Use This Skill

This skill auto-invokes when:
- User asks about Logseq's database schema or Datascript
- Questions about built-in classes (Tag, Page, Task, Property, etc.)
- Property type system questions (:default, :number, :date, :checkbox, etc.)
- Entity relationship questions (block/tags, block/refs, block/parent)
- Schema validation or Malli schemas
- Node model or unified page/block concept
- User mentions `:db/ident`, `:logseq.class/*`, or `:logseq.property/*`

**Reference Material**: See `{baseDir}/references/built-in-classes.md` for complete class hierarchy.

You have expert knowledge of Logseq's database schema architecture.

## Datascript Foundation

Logseq DB graphs are built on **Datascript**, a Clojure/ClojureScript in-memory database that supports:
- Entity-Attribute-Value (EAV) data model
- Datalog queries
- Schema-driven attribute definitions

### Attribute Types

```clojure
;; Value types
:db.type/ref      ; References to other entities
:db.type/string   ; Text values
:db.type/long     ; Integer numbers
:db.type/double   ; Floating point numbers
:db.type/boolean  ; True/false
:db.type/instant  ; Timestamps
:db.type/keyword  ; Clojure keywords
:db.type/uuid     ; UUIDs

;; Cardinality
:db.cardinality/one   ; Single value
:db.cardinality/many  ; Multiple values (set)
```

### Core Reference Attributes

```clojure
:block/tags    ; Classes/tags assigned to the entity
:block/refs    ; Outgoing references to other entities
:block/alias   ; Alternative names for a page
:block/parent  ; Parent block in hierarchy
:block/page    ; Page containing this block
```

## Built-in Classes Hierarchy

```
:logseq.class/Root
├── :logseq.class/Page
├── :logseq.class/Tag (classes themselves)
├── :logseq.class/Property
├── :logseq.class/Task
│   └── Status, Priority, Deadline, Scheduled
├── :logseq.class/Query
├── :logseq.class/Asset
├── :logseq.class/Code-block
└── :logseq.class/Template
```

All non-Root classes extend `:logseq.class/Root` via `:logseq.property.class/extends`.

## Property Type System

| Type | Validator | Closed Values | Use Case |
|------|-----------|---------------|----------|
| `:default` | `text-entity?` | ✅ | Text blocks with titles |
| `:number` | `number-entity?` | ✅ | Numeric values |
| `:date` | `date?` | ❌ | Journal page entities |
| `:datetime` | `datetime?` | ❌ | Time-based scheduling |
| `:checkbox` | `boolean?` | ❌ | Toggle properties |
| `:url` | `url-entity?` | ✅ | URL strings or macros |
| `:node` | `node-entity?` | ❌ | Block/page references |
| `:class` | `class-entity?` | ❌ | Class entities |

## Property Configuration Keys

```clojure
{:db/ident :user.property/my-property
 :logseq.property/type :default           ; Property type
 :logseq.property/cardinality :one        ; :one or :many
 :logseq.property/hide? false             ; Hide by default
 :logseq.property.ui/position :properties ; UI placement
 :logseq.property/closed-values [...]     ; Restricted choices
 :logseq.property/schema-classes [...]    ; Associated classes
 :block/title "My Property"}              ; Display name
```

## Property Namespaces

| Namespace | Purpose | Example |
|-----------|---------|---------|
| `logseq.property` | Core system properties | `:logseq.property/type` |
| `logseq.property.class` | Class-related | `:logseq.property.class/extends` |
| `logseq.property.table` | Table views | `:logseq.property.table/columns` |
| `user.property` | User-defined | `:user.property/author` |
| `plugin.property` | Plugin-defined | `:plugin.property/custom` |

## Schema Versioning

```clojure
;; Version format
{:major 65 :minor 12}

;; Stored in
:logseq.kv/schema-version  ; Graph's current version
db-schema/version          ; Expected version
```

Migrations handle schema upgrades between versions (65.0 → 65.12+).

## Malli Validation Flow

1. **Entity transformation**: Properties → `[property-map value]` tuples
2. **Schema dispatch**: Validation dispatches on `:logseq.property/type`
3. **Value validation**: Individual values checked against type schemas
4. **Cardinality handling**: Automatic `:many` vs `:one` handling
5. **Transaction validation**: `validate-tx-report` ensures integrity

## Node Model

### Unified Node Concept

In DB version, **nodes** represent both pages and blocks:

```
Node
├── Page (unique by tag combination)
│   ├── Journal pages (#Journal)
│   ├── Regular pages (#Page)
│   └── Class pages (#Tag)
└── Block (within pages)
    ├── Content blocks
    ├── Property blocks
    └── Convertible to page via #Page tag
```

### Page Uniqueness

Pages are unique by their tag combination:
- "Apple #Company" ≠ "Apple #Fruit"
- Both can coexist as separate entities

## Common Patterns

### Creating a Custom Class

```clojure
;; Define a class with properties
{:db/ident :user.class/Book
 :block/tags [:logseq.class/Tag]
 :block/title "Book"
 :logseq.property.class/extends :logseq.class/Root
 :logseq.property/schema-classes
   [:user.property/author
    :user.property/isbn
    :user.property/rating]}
```

### Creating a Typed Property

```clojure
;; Number property with choices
{:db/ident :user.property/rating
 :block/title "Rating"
 :logseq.property/type :number
 :logseq.property/cardinality :one
 :logseq.property/closed-values [1 2 3 4 5]}
```

## Resources

When users need more information, reference:
- [Logseq DB Documentation](https://github.com/logseq/docs/blob/master/db-version.md)
- [Database Schema DeepWiki](https://deepwiki.com/logseq/logseq/4.2-views-and-tables)
- [Logseq DB Unofficial FAQ](https://discuss.logseq.com/t/logseq-db-unofficial-faq/32508)
understanding-db-schema | SkillHub