Dataverse Alternate Keys: doporučení pro pozdě doplněné externí ID
Řádek vzniká v Dataverse dřív, než známe ID z externího systému. Async integrace po vytvoření zavolá externí systém, dostane ID a uloží ho do stringového sloupce, který je zvažovaný jako Dataverse Alternate Key.
Krátké doporučení
Nedělej z pozdě doplněného externího ID Alternate Key automaticky. Pro většinu integrací je lepší mít samostatný stabilní korelační/idempotency klíč známý už před Create a externí ID ukládat jako běžný sloupec. Alternate Key z externího ID použij až tehdy, když ho opravdu potřebuješ pro Dataverse-native adresování řádku, Upsert, lookupy nebo platformově vynucenou unikátnost.
Co je ověřené v Microsoft dokumentaci
| Téma | Ověřený fakt |
|---|---|
| Účel Alternate Keys | Slouží k identifikaci řádků jinak než primárním GUID, typicky v integračních scénářích. |
| Indexy | Microsoft uvádí, že Alternate Keys používají databázové indexy k vynucení unikátnosti a optimalizaci lookup výkonu. |
| Vytváření indexu | U existující tabulky může vytvoření indexu trvat dlouho a běží asynchronně; stav je přes EntityKeyIndexStatus. |
| Limity | Dokumentace uvádí SQL index limity 900 bytes per key a 16 columns per key; tabulka může mít max. 10 alternate key definitions. |
| String hodnoty | Hodnoty obsahující /, <, >, *, %, &, :, \\, ?, + nefungují pro GET/PATCH adresování přes alternate key. Pokud jde jen o unikátnost, může to stačit; pro integrace Microsoft doporučuje klíč bez těchto znaků. |
| Upsert výkon | Microsoft říká, že Upsert má performance penalty proti Create; pokud víš, že řádek neexistuje, použij Create. |
Co je inference pro tento scénář
Microsoft dokumentace explicitně nepopisuje všechny detaily scénáře „create s prázdným/null external ID → pozdější update na non-null alternate key“. Praktický závěr proto rozlišuj takto:
- Create bez známého externího ID: pokud alternate-key sloupec není vyplněný, nepomůže s idempotencí počátečního vytvoření.
- Pozdější Update external ID: zápis hodnoty do sloupce zahrnutého v Alternate Key musí udržet unikátní index; to je write-path režie navíc proti obyčejnému sloupci.
- Budoucí lookup/upsert přes Alternate Key: tady je hlavní přínos — indexované adresování a platformová kontrola unikátnosti.
- NULL/prázdné hodnoty: oficiální Microsoft Learn dokumentace v použitých zdrojích nepokrývá přesnou NULL semantiku Alternate Keys, takže ji ověř v pre-produkci na vlastním schématu a datech.
Odpovědi na původní otázky
- Je návrh výkonově přijatelný?
- Pro malé a střední objemy může být přijatelný.
-
Pro high-throughput integraci to není dobrý default, pokud externí ID nepotřebuješ pro
Upsert/adresování. -
Co bude stát víc: create, update, nebo upsert/lookups?
Create, pokud znáš, že řádek je nový, je nejčistší cesta.- Pozdější
Updatealternate-key sloupce nese index/unikátnost režii. Upsertpřes alternate key je prakticky nejdražší kandidát proti čistémuCreate, protože Microsoft uUpsertexplicitně uvádí performance penalty.-
Lookupy přes alternate key jsou naopak oblast, kde index pomáhá.
-
Má být externí ID Alternate Key?
- Ano, pokud ho budeš často používat k Dataverse adresování,
Upsert, matching nebo chceš platformově vynutit unikátnost. -
Ne jako default, pokud ho jen ukládáš po callbacku a řádek už znáš přes Dataverse GUID/korelační ID.
-
Doporučení pro high-throughput integrace
- Použij stabilní idempotency/correlation key známý před
Create. - Když je řádek určitě nový, používej
Create, neUpsert. - Externí ID po callbacku ukládej úzkým
Updatejen na známý řádek. - Alternate Key přidej až po jasném důvodu: časté lookupy/upserty, unikátnost nebo integrační adresování.
-
Omez synchronní plug-iny, workflow a business logiku na create/update cestě.
-
Co měřit v pre-produkci
Createlatency/throughput bez alternate key vs. s alternate key definicí.- Latenci pozdějšího
Update, který doplňuje externí ID. Upsertlatency/throughput přes alternate key proti čistémuCreate+Update.- Chyby unikátnosti, retry/replay scénáře async callbacku.
- Dopad batch/parallel zpracování a service protection limitů.
- Chování prázdných/null hodnot přesně pro daný sloupec a schéma.
Implementační checklist
- [ ] Rozhodni, který klíč je známý před
Createa použij ho pro idempotenci. - [ ] Externí ID označ jako Alternate Key jen při reálné potřebě
Upsert/adresování/unikátnosti. - [ ] Ověř, že string ID nepoužívá znaky problematické pro Web API alternate-key adresování.
- [ ] Změř create/update/upsert varianty na datovém objemu blízkém produkci.
- [ ] Připrav retry logiku na duplicate/conflict chyby a throttling.
Oficiální Microsoft zdroje
- Work with alternate keys
- Use an alternate key to reference a record
- Use Upsert to create or update a record
- Optimize performance for Create and Update operations
- Retrieve a table row using the Web API — retrieve using an alternate key
Kontrolní poznámka
Tento text záměrně odděluje věci přímo doložené Microsoft dokumentací od praktické inference pro konkrétní návrh integrace s pozdě doplněným externím ID.