Delen via


Unieke sleutelbeperkingen in Azure Cosmos DB

VAN TOEPASSING OP: NoSQL

Unieke sleutels voegen een laag gegevensintegriteit toe aan een Azure Cosmos DB-container. U maakt een uniek sleutelbeleid wanneer u een Azure Cosmos DB-container maakt. Met unieke sleutels zorgt u ervoor dat een of meer waarden binnen een logische partitie uniek zijn. U kunt ook de uniekheid per partitiesleutel garanderen.

Nadat u een container met een uniek sleutelbeleid hebt gemaakt, wordt het maken van een nieuw item of een update van een bestaand item dat resulteert in een duplicaat binnen een logische partitie, voorkomen, zoals opgegeven door de unieke sleutelbeperking. De partitiesleutel gecombineerd met de unieke sleutel garandeert de uniekheid van een item binnen het bereik van de container.

Denk bijvoorbeeld aan een Azure Cosmos DB-container met Email address als de unieke sleutelbeperking en CompanyID als de partitiesleutel. Wanneer u het e-mailadres van de gebruiker configureert met een unieke sleutel, heeft elk item een uniek e-mailadres binnen een bepaald CompanyIDitem. Er kunnen geen twee items worden gemaakt met dubbele e-mailadressen en met dezelfde partitiesleutelwaarde. In de API van Azure Cosmos DB voor NoSQL worden items opgeslagen als JSON-waarden. Deze JSON-waarden zijn hoofdlettergevoelig. Wanneer u een eigenschap als een unieke sleutel kiest, kunt u hoofdlettergevoelige waarden voor die eigenschap invoegen. Als u bijvoorbeeld een unieke sleutel hebt gedefinieerd voor de naameigenschap, verschilt 'Gaby' van 'gaby' en kunt u beide in de container invoegen.

Als u items met hetzelfde e-mailadres wilt maken, maar niet dezelfde voornaam, achternaam en e-mailadres, voegt u meer paden toe aan het unieke sleutelbeleid. In plaats van alleen een unieke sleutel te maken op basis van het e-mailadres, kunt u ook een unieke sleutel maken met een combinatie van de voornaam, achternaam en e-mailadres. Deze sleutel wordt een samengestelde unieke sleutel genoemd. In dit geval is elke unieke combinatie van de drie waarden binnen een gegeven CompanyID toegestaan.

De container kan bijvoorbeeld items bevatten met de volgende waarden, waarbij elk item voldoet aan de unieke sleutelbeperking.

CompanyID Voornaam Achternaam E-mailadres
Contoso Gaby Duperre gaby@contoso.com
Contoso Gaby Duperre gaby@fabrikam.com
Fabrikam Gaby Duperre gaby@fabrikam.com
Fabrikam Ivan Duperre gaby@fabrikam.com
Fabrkam Duperre gaby@fabraikam.com
Fabrkam gaby@fabraikam.com

Als u probeert een ander item in te voegen met de combinaties die in de vorige tabel worden vermeld, wordt er een foutbericht weergegeven. De fout geeft aan dat niet is voldaan aan de unieke sleutelbeperking. U ontvangt Resource with specified ID or name already exists of Resource with specified ID, name, or unique index already exists als een retourbericht.

Een unieke sleutel definiëren

U kunt alleen unieke sleutels definiëren wanneer u een Azure Cosmos DB-container maakt. Een unieke sleutel is gericht op een logische partitie. Als u in het vorige voorbeeld de container partitionert op basis van de postcode, kunt u dezelfde items in elke logische partitie hebben. Houd rekening met de volgende eigenschappen wanneer u unieke sleutels maakt:

  • U kunt een bestaande container niet bijwerken om een andere unieke sleutel te gebruiken. Met andere woorden, nadat een container is gemaakt met een uniek sleutelbeleid, kan het beleid niet worden gewijzigd.

  • Als u een unieke sleutel voor een bestaande container wilt instellen, maakt u een nieuwe container met de unieke sleutelbeperking. Gebruik het juiste hulpprogramma voor gegevensmigratie om de gegevens van de bestaande container naar de nieuwe container te verplaatsen. Voor SQL-containers gebruikt u de taken voor het kopiëren van containers om gegevens te verplaatsen. Gebruik voor MongoDB-containers mongoimport.exe of mongorestore.exe om gegevens te verplaatsen.

  • Een uniek sleutelbeleid kan maximaal 16 padwaarden bevatten. De waarden kunnen /firstNamebijvoorbeeld , /lastNameen /address/zipCode. Elk beleid voor unieke sleutels kan maximaal 10 unieke sleutelbeperkingen of combinaties hebben. In het vorige voorbeeld zijn voornaam, achternaam en e-mailadres samen één beperking. Deze beperking maakt gebruik van 3 van de 16 mogelijke paden.

  • Wanneer een container een uniek sleutelbeleid heeft, zijn de kosten voor aanvraageenheid (RU) voor het maken, bijwerken en verwijderen van een item iets hoger.

  • Sparse unieke sleutels worden niet ondersteund. Als sommige unieke padwaarden ontbreken, worden ze behandeld als null-waarden, die deelnemen aan de beperking voor uniekheid. Daarom kan er slechts één item met een null-waarde zijn om aan deze beperking te voldoen.

  • Unieke sleutelnamen zijn hoofdlettergevoelig. Denk bijvoorbeeld aan een container met de unieke sleutelbeperking ingesteld op /address/zipcode. Als uw gegevens een veld met de naam ZipCodehebben, voegt Azure Cosmos DB 'null' in als de unieke sleutel, omdat zipcode deze niet hetzelfde is als ZipCode. Vanwege deze hoofdlettergevoeligheid kunnen alle andere records met ZipCode niet worden ingevoegd omdat het dubbele null de unieke sleutelbeperking schendt.

Volgende stappen