Azure Cosmos DB'de benzersiz anahtar kısıtlamalarıUnique key constraints in Azure Cosmos DB

Benzersiz anahtarlar bir veri bütünlüğü katmanı için bir Azure Cosmos kapsayıcısı ekleyin.Unique keys add a layer of data integrity to an Azure Cosmos container. Bir Azure Cosmos kapsayıcı oluştururken bir benzersiz anahtar ilkesi oluşturun.You create a unique key policy when you create an Azure Cosmos container. Benzersiz anahtarlara sahip bir veya daha fazla değer mantıksal bölüm içindeki benzersiz olduğundan emin olun.With unique keys, you make sure that one or more values within a logical partition is unique. Ayrıca başına benzersizliği garanti bölüm anahtarı.You also can guarantee uniqueness per partition key.

Bir kapsayıcı benzersiz bir anahtar ilke oluşturduktan sonra yeni bir oluşturulmasını veya yinelenen bir mantıksal bölüm içinde bunun sonucunda var olan bir öğenin bir güncelleştirme engellendiğinde, benzersiz anahtar kısıtlaması tarafından belirtildiği gibi.After you create a container with a unique key policy, the creation of a new or an update of an existing item resulting in a duplicate within a logical partition is prevented, as specified by the unique key constraint. Benzersiz bir anahtarla birlikte bölüm anahtarı kapsayıcının kapsamı içindeki bir öğenin benzersizliği garanti eder.The partition key combined with the unique key guarantees the uniqueness of an item within the scope of the container.

Örneğin, bir Azure Cosmos kapsayıcı benzersiz anahtar kısıtlaması olarak e-posta adresiyle göz önünde bulundurun ve CompanyID bölüm anahtarı olarak.For example, consider an Azure Cosmos container with email address as the unique key constraint and CompanyID as the partition key. Kullanıcının e-posta adresi benzersiz bir anahtar ile yapılandırdığınızda, her öğe içinde benzersiz bir e-posta adresi olan bir verilen CompanyID.When you configure the user's email address with a unique key, each item has a unique email address within a given CompanyID. İki öğe, yinelenen bir e-posta adreslerine sahip ve aynı bölüm anahtarı değeri ile oluşturulamaz.Two items can't be created with duplicate email addresses and with the same partition key value.

Aynı e-posta ile öğeleri oluşturmak için benzersiz anahtar ilkesi için daha yollarını adresi, ancak değil aynı ad, Soyadı ve e-posta adresi ekleyin.To create items with the same email address, but not the same first name, last name, and email address, add more paths to the unique key policy. Yalnızca e-posta adresini temel alan benzersiz bir anahtar oluşturmak yerine benzersiz bir anahtar da oluşturabilirsiniz ile birlikte ad, Soyadı ve e-posta adresi.Instead of creating a unique key based on the email address only, you also can create a unique key with a combination of the first name, last name, and email address. Bu anahtarı bileşik benzersiz bir anahtar olarak bilinir.This key is known as a composite unique key. Bu durumda, içinde üç her benzersiz birleşimi değerleri bir verilen CompanyID izin verilir.In this case, each unique combination of the three values within a given CompanyID is allowed.

Örneğin, kapsayıcı öğeleri burada her öğeyi benzersiz anahtar kısıtlaması geliştirir aşağıdaki değerlerle içerebilir.For example, the container can contain items with the following values, where each item honors the unique key constraint.

CompanyıdCompanyID AdFirst name SoyadıLast name E-posta adresiEmail address
ContosoContoso GabyGaby DuperreDuperre gaby@contoso.com
ContosoContoso GabyGaby DuperreDuperre gaby@fabrikam.com
FabrikamFabrikam GabyGaby DuperreDuperre gaby@fabrikam.com
FabrikamFabrikam Çalışan IvanIvan DuperreDuperre gaby@fabrikam.com
FabrkamFabrkam DuperreDuperre gaby@fabraikam.com
FabrkamFabrkam gaby@fabraikam.com

Önceki tabloda listelenen birleşimleri olan başka bir öğe eklemeye çalışırsanız, bir hata alırsınız.If you attempt to insert another item with the combinations listed in the previous table, you receive an error. Benzersiz anahtar kısıtlaması'nin karşılanmadığı durumların hata gösterir.The error indicates that the unique key constraint wasn't met. Ya da aldığınız Resource with specified ID or name already exists veya Resource with specified ID, name, or unique index already exists dönüş iletisi.You receive either Resource with specified ID or name already exists or Resource with specified ID, name, or unique index already exists as a return message.

Benzersiz bir anahtar tanımlayınDefine a unique key

Yalnızca bir Azure Cosmos kapsayıcısı oluşturduğunuzda, benzersiz anahtarlar tanımlayabilirsiniz.You can define unique keys only when you create an Azure Cosmos container. Benzersiz bir anahtar, mantıksal birime kapsamlıdır.A unique key is scoped to a logical partition. POSTA koduna göre kapsayıcı bölümlemeniz halinde önceki örnekte, mantıksal her bölümdeki yinelenen öğeler ile sonlanır.In the previous example, if you partition the container based on the ZIP code, you end up with duplicated items in each logical partition. Benzersiz anahtarlar oluşturduğunuzda aşağıdaki özellikleri göz önünde bulundurun:Consider the following properties when you create unique keys:

  • Farklı bir benzersiz anahtar kullanmak için var olan bir kapsayıcı güncelleştirilemiyor.You can't update an existing container to use a different unique key. Diğer bir deyişle, ilke, bir kapsayıcı benzersiz bir anahtar ilke oluşturulduktan sonra değiştirilemez.In other words, after a container is created with a unique key policy, the policy can't be changed.

  • Var olan bir kapsayıcı için benzersiz bir anahtar kümesi için benzersiz anahtar kısıtlaması ile yeni bir kapsayıcı oluşturun.To set a unique key for an existing container, create a new container with the unique key constraint. Yeni kapsayıcı için mevcut kapsayıcıdan verileri taşımak için uygun veri geçiş aracını kullanın.Use the appropriate data migration tool to move the data from the existing container to the new container. SQL kapsayıcıları için veri geçiş aracı verileri taşımak için.For SQL containers, use the Data Migration tool to move data. MongoDB kapsayıcıları için mongoimport.exe veya mongorestore.exe verileri taşımak için.For MongoDB containers, use mongoimport.exe or mongorestore.exe to move data.

  • En fazla 16 yol değerlerinin bir benzersiz anahtar ilkesi olabilir.A unique key policy can have a maximum of 16 path values. Örneğin, değerleri olabilir /firstName, /lastName, ve /address/zipCode.For example, the values can be /firstName, /lastName, and /address/zipCode. Her bir benzersiz anahtar ilkesi, en fazla 10 benzersiz anahtar kısıtlamaları veya birleşimleri olabilir.Each unique key policy can have a maximum of 10 unique key constraints or combinations. Her benzersiz dizin kısıtlaması birleşik yollarını 60 baytı aşmamalıdır.The combined paths for each unique index constraint must not exceed 60 bytes. Önceki örnekte, ad, Soyadı ve e-posta adresi bir kısıtlama birleştirilir.In the previous example, first name, last name, and email address together are one constraint. Bu kısıtlama, 3 16 olası yolları kullanır.This constraint uses 3 out of the 16 possible paths.

  • Bir kapsayıcı benzersiz bir anahtar ilke olduğunda istek birimi (RU) ücretleri oluşturmak için güncelleştirme ve devre dışı bir öğeyi silmek biraz daha yüksektir.When a container has a unique key policy, Request Unit (RU) charges to create, update, and delete an item are slightly higher.

  • Seyrek benzersiz anahtarlar desteklenmez.Sparse unique keys are not supported. Bazı benzersiz yolu eksik değerler benzersizlik kısıtlaması katılmak null değerler olarak kabul.If some unique path values are missing, they're treated as null values, which take part in the uniqueness constraint. Bu nedenle, yalnızca tek bir öğe bu kısıtlamasını karşılamak için null değerine sahip olabilir.For this reason, there can be only a single item with a null value to satisfy this constraint.

  • Benzersiz anahtar adları büyük/küçük harfe duyarlıdır.Unique key names are case-sensitive. Örneğin, bir kapsayıcı ayarlamak benzersiz anahtar kısıtlaması ile göz önünde /address/zipcode.For example, consider a container with the unique key constraint set to /address/zipcode. Verilerinizi adlı bir alan varsa ZipCode, Azure Cosmos DB ekler "benzersiz anahtar null" çünkü zipcode aynı olmayan ZipCode.If your data has a field named ZipCode, Azure Cosmos DB inserts "null" as the unique key because zipcode isn't the same as ZipCode. Bu büyük/küçük harfe duyarlılık nedeniyle, "null" yinelenen benzersiz anahtar kısıtlamasını ihlal ettiğinden ZipCode diğer tüm kayıtları eklenemez.Because of this case sensitivity, all other records with ZipCode can't be inserted because the duplicate "null" violates the unique key constraint.

Sonraki adımlarNext steps