Deep research: Evidence datového modelu, aplikační logiky a field-level usage v Obsidianu


Executive summary

Pokud chceš v Obsidianu spolehlivě dohledat, kde všude se používá konkrétní pole a co rozbije jeho změna, jako default doporučuju tento model:

  1. Source of truth = Markdown notes
  2. Struktura = hybridní knowledge model
  3. 1 note = 1 entita
  4. 1 note = 1 executable asset / logický objekt
  5. 1 note = 1 field jen pro critical / shared / integration-heavy pole
  6. low-value fieldy držet jen jako tabulku uvnitř entity
  7. Typed metadata = YAML / Properties
  8. Dotazování = Dataview
  9. Vztahy = explicitní wikilinky + typed relation fields
  10. Vizualizace = Canvas / Excalidraw / Juggl pouze jako view layer, ne source of truth
  11. Rozhodnutí = ADR notes

Jednověté doporučení

Pro CRM / Dataverse projekty zaveď hybridní model “Entity + Critical Field + Asset + ADR”, kde field-level traceability stojí na typed metadata (reads, writes, validates, derives) a na Dataview query vrstvách.


1. Co přesně řešíme

Cílem není jen popsat data model, ale umožnit odpovědět na otázky typu:

To znamená, že musíš evidovat 4 vrstvy zároveň:

  1. Structural model – entity, pole, datové typy, relace
  2. Behavioral model – kdo co čte, zapisuje, validuje, odvozuje
  3. Decision model – proč to tak je
  4. Impact / traceability model – co je upstream/downstream

2. Variants comparison

2.1 Porovnání přístupů

Varianta Jak funguje Výhody Slabiny Verdict
1. Čistě wikilinkový model notes propojené jen odkazy v textu jednoduchý start, nízké tření špatná queryovatelnost, slabé typed relations, rychle se rozpadá dobré na začátek, ne jako standard
2. Wikilinky + YAML frontmatter odkazy + metadata ve frontmatter výrazně lepší struktura, strojově čitelné pořád vyžaduje disciplínu a konvence minimum, které dává smysl
3. YAML + Dataview-centric metadata jsou primární zdroj query/reportů nejlepší poměr síla / jednoduchost / auditovatelnost složitější návrh schématu, část advanced dotazů končí v DataviewJS nejlepší default
4. Graph/relationship plugin-centric vztahy řeší hlavně specializovaný plugin silná vizualizace, zajímavé typed views plugin risk, složitější onboarding, často slabší jako source of truth vhodné jen jako doplněk
5. Hybridní doporučený model notes + metadata + Dataview + volitelná vizualizace nejlepší traceability i maintainability chce zavést standard a review proces doporučený standard

2.2 Rozhodnutí

Default zvolit variantu 5:


3. Doporučený target operating model

3.1 Typy notes

Zaveď pevné note types:

Type Účel Povinné? Poznámka
entity business / Dataverse tabulka ano 1 note = 1 entita
field critical pole ano pro critical fieldy low-value fieldy nemusí mít vlastní note
asset plugin, flow, integration, script, report, form logic ano to je hlavní nosič behavioral traceability
rule business rule / validation / derivation doporučeno může být i podtyp asset, ale raději oddělit pokud je hodně pravidel
decision ADR / design decision ano pro významné změny vysvětluje proč
system externí nebo interní systém doporučeno CRM, ERP, DWH, portal
concept business term / ubiquitous language volitelné pomáhá proti pojmovému driftu
diagram curated arch view volitelné pouze vizualizační vrstva

3.2 Kdy udělat 1 note = 1 field

Udělat samostatný field note, pokud pole je:

Nedělat samostatný field note, pokud pole je:

Praktické pravidlo

To je klíčové, jinak se vault utopí v maintenance costu.


4. Doporučená složková struktura vaultu

00-home/
  Architecture Hub.md
  Traceability Dashboard.md

01-domains/
  Sales/
  Service/
  Finance/

10-entities/
  Contact.md
  Account.md
  Opportunity.md

11-fields/
  Contact/
    contact.firstname.md
    contact.emailaddress1.md
  Account/
    account.accountnumber.md
    account.creditlimit.md

20-assets/
  Plugins/
    Plugin - Validate Contact First Name.md
    Plugin - Sync Contact To ERP.md
  Flows/
    Flow - Welcome Email.md
  Reports/
    Report - Customer Completeness.md
  Forms/
    Form Script - Contact OnLoad.md
  Integrations/
    Integration - Dataverse to ERP Contact Sync.md

30-rules/
  Rule - Contact name required for B2C.md
  Rule - Credit score derivation.md

40-systems/
  Dataverse.md
  ERP.md
  DWH.md
  Portal.md

50-decisions/
  ADR-001-contact-name-model.md
  ADR-002-creditlimit-source-of-truth.md

60-queries/
  Query - Critical fields by entity.md
  Query - Assets using field.md
  Query - Downstream impact.md

70-diagrams/
  Contact lifecycle.canvas
  CRM integration landscape.excalidraw.md

80-templates/
  Entity Template.md
  Field Template.md
  Asset Template.md
  Rule Template.md
  ADR Template.md

Proč takto


5. Metadata standard

5.1 Společné minimum pro všechny notes

id: entity-contact
kind: entity
status: active
owner: crm-team
last_verified: 2026-05-17
verification_source: code-review
confidence: high
aliases: []
tags: []

Doporučení: - id drž stabilní a strojově čitelný, - kind je povinný diskriminátor, - last_verified a confidence pomáhají odhalovat zastaralé notes.

5.2 Entity template

id: entity-contact
kind: entity
display_name: Contact
logical_name: contact
domain: sales
system_of_record: [[Dataverse]]
owner: crm-team
status: active
criticality: high
fields:
  - [[contact.firstname]]
  - [[contact.lastname]]
  - [[contact.emailaddress1]]
key_fields:
  - [[contact.emailaddress1]]
related_entities:
  - [[Account]]
used_by_assets:
  - [[Plugin - Validate Contact First Name]]
  - [[Integration - Dataverse to ERP Contact Sync]]
decisions:
  - [[ADR-001-contact-name-model]]
last_verified: 2026-05-17
verification_source: schema-review
confidence: high

5.3 Field template

id: field-contact-firstname
kind: field
entity: [[Contact]]
logical_name: contact.firstname
display_name: First Name
data_type: string
required: false
max_length: 100
pii: true
classification: personal-data
source_of_truth: [[Dataverse]]
criticality: medium
status: active
reads:
  - [[Plugin - Validate Contact First Name]]
  - [[Integration - Dataverse to ERP Contact Sync]]
writes:
  - [[Dataverse UI]]
  - [[Integration - Portal Contact Capture]]
validates:
  - [[Rule - Contact first name sanitization]]
derives: []
derived_from: []
impacts:
  - [[ERP]]
  - [[Welcome Email Personalization]]
decisions:
  - [[ADR-001-contact-name-model]]
last_verified: 2026-05-17
verification_source: code-review
confidence: medium

5.4 Asset template

Použij pro plugin, flow, integration, report, script nebo form logic.

id: asset-plugin-validate-contact-first-name
kind: asset
asset_type: plugin
layer: server
system: [[Dataverse]]
trigger:
  message: update
  stage: pre-operation
  entity: [[Contact]]
owner: crm-team
status: active
repo: crm-plugins
path: src/Plugins/ValidateContactFirstName.cs
reads:
  - [[contact.firstname]]
  - [[contact.lastname]]
writes: []
validates:
  - [[contact.firstname]]
derives: []
depends_on:
  - [[Rule - Contact first name sanitization]]
affects_entities:
  - [[Contact]]
decisions:
  - [[ADR-001-contact-name-model]]
last_verified: 2026-05-17
verification_source: code-review
confidence: high

5.5 Rule template

id: rule-contact-first-name-sanitization
kind: rule
rule_type: validation
owner: crm-team
status: active
reads:
  - [[contact.firstname]]
writes: []
validates:
  - [[contact.firstname]]
implemented_by:
  - [[Plugin - Validate Contact First Name]]
affects_entities:
  - [[Contact]]
severity: medium
last_verified: 2026-05-17
verification_source: code-review
confidence: high

5.6 ADR template

id: adr-001
kind: decision
status: accepted
date: 2026-05-17
decides_for:
  - [[Contact]]
  - [[contact.firstname]]
  - [[Plugin - Validate Contact First Name]]
supersedes: []
review_date: 2026-08-01

6. Linkovací strategie

6.1 Základní pravidlo

Wikilink sám o sobě nestačí.

Používej dvě vrstvy zároveň:

  1. Wikilinks v textu – pro čitelnost a navigaci
  2. typed linky v metadata fields – pro query a impact analysis

6.2 Doporučená taxonomie relation fields

Drž jádro malé a stabilní:

Pole Význam
fields entity obsahuje tato pole
reads asset / rule čte tato pole
writes asset / integration zapisuje tato pole
validates asset / rule validuje tato pole
derives asset nebo rule odvozuje tato pole
derived_from field je odvozen z těchto fieldů
depends_on závislost na assetu, pravidlu nebo systému
used_by_assets agregovaný přehled usage
decisions relevantní ADR
related_entities business nebo technická relace mezi entitami

6.3 Směr linkování

Doporučený směr:

Praktický důvod: - backlinks na field note pak přirozeně ukazují „kde všude se pole používá“.


7. End-to-end příklad

7.1 Entita Contact

Note: 10-entities/Contact.md

id: entity-contact
kind: entity
display_name: Contact
logical_name: contact
domain: sales
system_of_record: [[Dataverse]]
fields:
  - [[contact.firstname]]
  - [[contact.lastname]]
  - [[contact.emailaddress1]]
used_by_assets:
  - [[Plugin - Validate Contact First Name]]
  - [[Integration - Dataverse to ERP Contact Sync]]
  - [[Flow - Welcome Email Personalization]]
status: active

7.2 Pole contact.firstname

Note: 11-fields/Contact/contact.firstname.md

id: field-contact-firstname
kind: field
entity: [[Contact]]
logical_name: contact.firstname
display_name: First Name
data_type: string
required: false
pii: true
reads:
  - [[Plugin - Validate Contact First Name]]
  - [[Flow - Welcome Email Personalization]]
  - [[Integration - Dataverse to ERP Contact Sync]]
writes:
  - [[Dataverse UI]]
  - [[Integration - Portal Contact Capture]]
validates:
  - [[Rule - Contact first name sanitization]]
derived_from: []
status: active

7.3 Plugin používající pole

Note: 20-assets/Plugins/Plugin - Validate Contact First Name.md

id: asset-plugin-validate-contact-first-name
kind: asset
asset_type: plugin
trigger:
  message: update
  stage: pre-operation
  entity: [[Contact]]
reads:
  - [[contact.firstname]]
writes: []
validates:
  - [[contact.firstname]]
implemented_rules:
  - [[Rule - Contact first name sanitization]]
status: active

7.4 Další dva usage příklady

Flow: Welcome Email Personalization

id: asset-flow-welcome-email
kind: asset
asset_type: flow
reads:
  - [[contact.firstname]]
  - [[contact.emailaddress1]]
writes: []
depends_on:
  - [[Mailing Platform]]
status: active

Integration: Dataverse to ERP Contact Sync

id: asset-integration-contact-sync
kind: asset
asset_type: integration
source_system: [[Dataverse]]
target_system: [[ERP]]
reads:
  - [[contact.firstname]]
  - [[contact.lastname]]
  - [[contact.emailaddress1]]
writes:
  - [[erp_contact.first_name]]
status: active

7.5 Jak pak dohledat usage pole

Pro contact.firstname chceš najít: - kdo čte, - kdo zapisuje, - kdo validuje, - kde je downstream dopad.

To řeší kombinace: - metadata přímo na field note, - backlinks, - Dataview dotazy nad reads, writes, validates, - případně DataviewJS pro širší impact chain.


8. Dataview dotazy

Pozn.: syntax se může mírně lišit podle konkrétního modelu Properties / plugin verze; níže je návrhový standard.

8.1 Všechna pole entity

TABLE logical_name AS "Pole", data_type AS "Typ", criticality AS "Kritičnost", status AS "Status"
FROM "11-fields"
WHERE kind = "field" AND entity = [[Contact]]
SORT logical_name ASC

8.2 Všechna assets používající konkrétní field

TABLE asset_type AS "Typ assetu", layer AS "Layer", status AS "Status"
FROM "20-assets"
WHERE contains(reads, [[contact.firstname]])
   OR contains(writes, [[contact.firstname]])
   OR contains(validates, [[contact.firstname]])
   OR contains(derives, [[contact.firstname]])
SORT asset_type ASC

8.3 Všechny validace nad fieldem

TABLE file.link AS "Rule / Asset", status AS "Status"
FROM ""
WHERE (kind = "rule" OR kind = "asset")
  AND contains(validates, [[contact.firstname]])
SORT file.name ASC

8.4 Downstream závislosti pole

TABLE file.link AS "Downstream objekt", kind AS "Kind", status AS "Status"
FROM ""
WHERE contains(reads, [[contact.firstname]])
   OR contains(derived_from, [[contact.firstname]])
SORT kind ASC

8.5 Critical fields bez vlastního usage pokrytí

TABLE entity AS "Entita", logical_name AS "Pole", status AS "Status"
FROM "11-fields"
WHERE kind = "field"
  AND criticality = "high"
  AND length(reads) = 0
  AND length(writes) = 0
  AND length(validates) = 0
SORT logical_name ASC

8.6 Entity s největším blast radius

TABLE length(used_by_assets) AS "Počet assetů", status AS "Status"
FROM "10-entities"
WHERE kind = "entity"
SORT length(used_by_assets) DESC

8.7 Notes ke kontrole zastaralosti

TABLE kind, owner, last_verified, confidence
FROM ""
WHERE date(today) - date(last_verified) > dur(90 days)
SORT last_verified ASC

9. Doporučené pluginy a jejich role

Níže jsou pluginy relevantní pro tento use case. GitHub stars a activity jsou ověřené k 2026-05-17 přes GitHub API.

Nástroj Role v modelu Proč ano Limity GitHub
Dataview query engine nejlepší poměr síla / jednoduchost / auditovatelnost složitější transitive queries často končí v DataviewJS 8,950 ★
Excalidraw curated diagrams velmi silný pro architekturu a onboarding není source of truth pro relations 6,902 ★
DB Folder tabulková správa notes užitečné pro katalogy a operativní editing menší fit pro hlubokou traceability než Dataview 1,398 ★
Juggl pokročilá graph explorace dobré na dependency exploration ne query backbone 800 ★
Breadcrumbs typed-link / hierarchy navigace užitečné tam, kde chceš explicitní traversals vyšší adopční riziko jako core model 779 ★
Metadata Menu governance metadata pomáhá držet datovou disciplínu další plugin dependency 692 ★
Canvas (core) vizualizace low-risk, native, vhodné pro mapy query a traceability řeší jen nepřímo core feature

9.1 Doporučené pořadí zavádění

  1. Core Properties + Wikilinks
  2. Dataview
  3. Templates / standard metadata
  4. Metadata Menu (pokud začne být problém s nekonzistencí polí)
  5. Canvas nebo Excalidraw
  6. Juggl jen pokud chceš lepší graph exploration
  7. Breadcrumbs jen pokud víš, že potřebuješ typed traversal UX jako primary interaction model

9.2 Plugin defaulty

Default stack pro tento use case


10. Co držet jednoduché a co už je overengineering

Držet jednoduché

Overengineering je


11. Jak odlišit datovou strukturu, technickou implementaci, business pravidlo a impact

Používej toto rozlišení:

Vrstva Co obsahuje Kde žije
Datová struktura entity, fieldy, typy, relace entities/, fields/
Technická implementace pluginy, flow, integrace, reporty, form scripty assets/
Business pravidlo validace, derivace, constraints rules/ nebo podtyp asset
Rozhodnutí proč je něco navrženo takto decisions/
Impact view query a dashboards nad závislostmi queries/, případně Canvas/Excalidraw

Tím se vyhneš typickému chaosu, kdy se technická implementace míchá do entity notes a časem se nedá auditovat.


12. Rollout postup

Fáze 1 – základní skeleton

Založ: - typy note templates, - složky, - naming conventions, - 3–5 základních Dataview dashboards.

Minimum done

Fáze 2 – bootstrap modelu

Začni jen s: - top 10 entitami, - top 30–50 critical fieldy, - top 20 assety, - top 10 nejdůležitějšími rozhodnutími.

Nesnaž se hned pokrýt vše.

Fáze 3 – traceability coverage

Pro každý critical field doplň: - reads, - writes, - validates, - derived_from, - decisions.

Fáze 4 – governance

Zaveď Definition of Done:

Fáze 5 – audit / freshness

Každý release nebo významná změna: - projít stale notes dashboard, - projít orphan fieldy, - projít critical fieldy bez usage coverage, - projít assets bez ownera nebo bez last_verified.


13. Naming conventions

Doporučené názvy notes:

Proč


14. Rizika a limity

Riziko Co se stane Mitigace
Příliš detailní model vault exploduje počtem notes field notes jen pro critical fieldy
Nekonzistentní metadata dotazy vrací špatné výsledky templates + review + případně Metadata Menu
Přehnaná závislost na diagramu vizualizace zastará, ale data ne diagramy jen jako projection layer
Plugin lock-in změna pluginu rozbije workflow source of truth držet v Markdown + Properties
Chybějící review dokumentace zestárne last_verified, freshness dashboards, DoD
Duplicitní evidence různé notes tvrdí něco jiného single source of truth per fact

15. Default standard, který bych zavedl

Pokud bych měl navrhnout jediný standard pro tým, byl by tento:

Povinné

Doporučené

Nedoporučené jako default


16. Praktický answer na hlavní otázky z tasku

1) Jaký knowledge model zvolit?

Hybridní model: entity + critical field + asset + decision.

2) 1 note = entity / field / plugin / use case?

3) Jak reprezentovat vazby?

Přes typed metadata fields (reads, writes, validates, derives, derived_from) + wikilinky v textu.

4) Jak využít wikilinky, frontmatter, Dataview a pluginy?

5) Jak to udělat udržovatelné?

6) Jak oddělit datovou strukturu, implementaci, business pravidlo a impact?

Oddělené note types a složky; impact nenechávat v prose, ale generovat ho z relations.

7) Jak řešit traceability a impact analysis?

Přes explicitní relations na field-level notes a query typu „kdo čte / zapisuje / validuje / odvozuje tento field“.


17. Ověřené zdroje

Oficiální Obsidian docs

Pluginy / dokumentace

Poznámka ke zdrojům


18. Final recommendation

Pro tvůj use case bych jako standard zavedl toto:

Obsidian jako lightweight architecture knowledge graph nad Markdown notes, kde entity a executable assets jsou first-class, critical fields jsou first-class selektivně a veškerá impact analysis stojí na typed metadata + Dataview dotazech.

To je nejpraktičtější kompromis mezi: - dohledatelností usage na úrovni pole, - čitelností pro architekta i vývojáře, - rozumnou mírou manuální práce, - a udržitelností v čase.