Vincoli di chiave univoca in Azure Cosmos DB
SI APPLICA A: NoSQL
Le chiavi univoche aggiungono un livello di integrità dei dati a un contenitore di Azure Cosmos DB. I criteri di chiave univoca si creano al momento della creazione di un contenitore di Azure Cosmos DB. Con le chiavi univoche si garantisce l'univocità di uno o più valori all'interno di una partizione logica. Si può anche garantire l'univocità per chiave di partizione.
Dopo aver creato un contenitore con criteri di chiave univoca, non è possibile creare o aggiornare un elemento esistente che risulti un duplicato in una partizione logica, come specificato dal vincolo di chiave univoca. La chiave di partizione combinata con la chiave univoca garantisce l'univocità di un elemento all'interno dell'ambito del contenitore.
Si consideri ad esempio un contenitore di Azure Cosmos DB con Email address
come vincolo di chiave univoca e CompanyID
come chiave di partizione. Quando si configura l'indirizzo di posta elettronica dell'utente con una chiave univoca, ogni elemento ha un indirizzo di posta elettronica univoco all'interno di un determinato CompanyID
. Non è possibile creare due elementi con indirizzi di posta elettronica duplicati e con lo stesso valore di chiave di partizione. Nell'API di Azure Cosmos DB per NoSQL, gli elementi vengono archiviati come file JSON. Per i valori JSON viene fatta distinzione tra maiuscole e minuscole. Quando si sceglie una proprietà come chiave univoca, è possibile specificare valori con distinzione tra maiuscole e minuscole. Ad esempio, se nella proprietà name è definita una chiave univoca, "Gaby" è diverso da "gaby" ed entrambe le versioni possono essere inserite nel contenitore.
Per creare elementi con lo stesso indirizzo di posta elettronica, ma non con la stessa combinazione di nome, cognome e indirizzo di posta elettronica, aggiungere altri percorsi ai criteri di chiave univoca. Anziché creare una chiave univoca basata solo sull'indirizzo di posta elettronica, è anche possibile crearne una composta da nome, cognome e indirizzo di posta elettronica. Questa chiave è detta chiave univoca composta. In questo caso è consentita ogni combinazione univoca dei tre valori all'interno di un determinato elemento CompanyID
.
Il contenitore può ad esempio contenere elementi con i valori seguenti, in cui ogni elemento rispetta il vincolo di chiave univoca.
CompanyID | Nome | Cognome | Indirizzo di posta elettronica |
---|---|---|---|
Contoso | Gaby | Duperre | gaby@contoso.com |
Contoso | Gaby | Duperre | gaby@fabrikam.com |
Fabrikam | Gaby | Duperre | gaby@fabrikam.com |
Fabrikam | Ivan | Duperre | gaby@fabrikam.com |
Fabrikam | Duperre | gaby@fabraikam.com | |
Fabrikam | gaby@fabraikam.com |
Se si cerca di inserire un altro elemento con le combinazioni elencate nella tabella riportata sopra, viene visualizzato un messaggio di errore che indica che il vincolo di chiave univoca non è stato rispettato. Si riceve Resource with specified ID or name already exists
o Resource with specified ID, name, or unique index already exists
come messaggio restituito.
Definire una chiave univoca
È possibile definire chiavi univoche solo quando si crea un contenitore di Azure Cosmos DB. Una chiave univoca ha come ambito una partizione logica. Nell'esempio precedente, se il contenitore viene partizionato in base al CAP, in ogni partizione logica potrebbero risultare elementi identici. Durante la creazione di chiavi univoche, prendere in considerazione le proprietà seguenti:
Non è possibile aggiornare un contenitore esistente in modo che usi una chiave univoca diversa. In altre parole, una volta creato un contenitore con criteri di chiave univoca, non è possibile modificarli.
Per impostare una chiave univoca per un contenitore esistente, creare un nuovo contenitore con il vincolo di chiave univoca. Usare lo strumento di migrazione dei dati appropriato per spostare i dati dal contenitore esistente a quello nuovo. Per i contenitori SQL, usare i processi di copia dei contenitori per spostare i dati. Per i contenitori MongoDB usare mongoimport.exe o mongorestore.exe per spostare i dati.
I criteri di chiave univoca possono contenere un massimo di 16 valori di percorso. Ad esempio, i valori possono essere
/firstName
,/lastName
e/address/zipCode
. I singoli criteri di chiave univoca possono avere un massimo di 10 vincoli o combinazioni di vincoli di chiave univoca. Nell'esempio precedente, nome, cognome e indirizzo di posta elettronica rappresentano un unico vincolo, che usa 3 dei 16 possibili percorsi.Quando un contenitore include criteri di chiave univoca, i costi delle unità richieste (UR) per creare, aggiornare ed eliminare un elemento sono leggermente superiori.
Le chiavi univoche di tipo sparse non sono supportate. Se non sono definiti alcuni valori di percorso univoci, questi vengono considerati come valori Null facenti parte del vincolo di univocità. Per questo motivo può essere presente un solo elemento con valore Null per soddisfare il vincolo.
I nomi delle chiavi univoche distinguono tra maiuscole e minuscole. Si consideri ad esempio un contenitore con il vincolo di chiave univoca impostato su
/address/zipcode
. Se i dati includono un campo denominatoZipCode
, Azure Cosmos DB inserisce "null" come chiave univoca, perchézipcode
non è uguale aZipCode
. A causa di questa distinzione tra maiuscole e minuscole, tutti gli altri record con ZipCode non possono essere inseriti, in quanto il valore "null" duplicato viola il vincolo di chiave univoca.
Passaggi successivi
- Informazioni sulle partizioni logiche
- Scoprire come definire chiavi univoche durante la creazione di un contenitore
- Si sta tentando di pianificare la capacità per una migrazione ad Azure Cosmos DB? È possibile usare le informazioni del cluster di database esistente per la pianificazione della capacità.
- Se si conosce solo il numero di vcore e server nel cluster di database esistente, leggere le informazioni sulla stima delle unità richieste usando vCore o vCPU
- Se si conosce la frequenza delle richieste tipiche per il carico di lavoro corrente del database, leggere le informazioni sulla stima delle unità richieste con lo strumento di pianificazione della capacità di Azure Cosmos DB