Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
İlişkiler, GraphQL API'nizi basit veri erişiminden iş varlıklarınızın gerçekte nasıl bağlandığını yansıtan güçlü bir grafiğe dönüştürür. İstemcileri birden çok gidiş dönüş çağrısı yapmaya ve verileri el ile birleştirmeye zorlamak yerine ilişkiler, bir müşteriyi, siparişlerini, söz konusu siparişlerdeki ürünleri ve ürün kategorilerini tek seferde alarak iç içe, ilgili verileri tek bir sorguda getirmenize olanak tanır.
İlişkiler olmadan API'niz istemcilerin kendilerini birleştirmesi gereken yalıtılmış veriler döndürür. İlişkilerde, bu bağlantıları şemanızda bir kez tanımlarsınız ve GraphQL geçişi otomatik olarak işler. Örneğin, bir üründen başlayan bir sorgu siparişlerde gezinerek ürünü satın alan tüm müşterileri bulabilir veya sipariş ettiği tüm ürünleri tek bir verimli istekte görmek için müşteriden başlayabilir.
GraphQL için Doku API'si, tüm yaygın veri modelleme senaryolarını kapsayan üç ilişki deseni destekler:
- Bire bir (1:1): Bir türdeki her kayıt, başka bir türdeki bir kayıtla ilgilidir (örnek: Ürün → ProductCategory, her ürünün bir kategorisi vardır)
- Bire çok (1:N): Bir türdeki her kayıt başka bir türdeki birden çok kayıtla ilişkilidir (örnek: ProductCategory → Product, her kategori birçok ürün içerir)
- Çoka çok (M:N): Her iki türdeki kayıtlar diğer türdeki birden çok kayıtla ilişkilendirilebilir (örnek: SiparişBaşlığı ↔ Ürün, siparişlerin birden çok ürün içerdiği ve ürünlerin birden çok siparişte göründüğü durumlar)
GraphQL şemanızda bu ilişkileri modelleyerek, etki alanı modelinizi yansıtan ve istemci uygulama kodunu önemli ölçüde basitleştiren sezgisel bir API oluşturursunuz.
Önkoşullar
İlişki oluşturmadan önce şunları yapmanız gerekir:
GraphQL API şemanızda tanımlanan en az iki tür. Örneğin, AdventureWorks örnek verilerini kullanıyorsanız,
Product,ProductCategory,SalesOrderHeadergibi türleriniz olabilir veSalesOrderDetailzaten göl evi veya depolama tablolarınızdan oluşturulmuş olabilir. Henüz türleriniz yoksa bkz. Fabric'de GraphQL için bir API oluşturun ve veri ekleyin.İlişkilendirmek istediğiniz türler arasındaki eşleşen alanlar (yabancı anahtarlar). Bire bir veya bire çok ilişkisi için, her iki türde de ortak bir alana ihtiyacınız vardır; örneğin
ProductCategoryID, hemProducthem deProductCategoryiçinde görünür. Bu alanlar, ilişki için bağlantı noktaları görevi görür.Çoka çok ilişkiler için bir bağlantı türü (birleşim tablosu). Çoka çok ilişkisi oluşturuyorsanız, diğer ikisini bağlayan üçüncü bir türe ihtiyacınız vardır. Örneğin, çoka çok ilişkide
SalesOrderHeaderveProductilişkilendirmek içinSalesOrderDetailbağlama türü olarak gereklidir. Bu bağlantı türü, ilişkilendirmek istediğiniz her iki türü deSalesOrderIDveProductIDgibi işaret eden yabancı anahtarlara sahip olmalıdır. Çoka çok ilişkiler hakkında daha fazla bilgi edinin.
Yeni bire bir ilişki oluşturma
Bire bir ilişki, bir türdeki her kaydın diğer türdeki bir kayıtla ilişkilendirildiği iki tip arasında oluşturulur. Bu, aynı tabloda yer alan ancak kuruluş veya performans nedenleriyle ayrılmış ilişkili verileriniz olduğunda kullanışlıdır. Örneğin, bir Product bir ProductCategory alanı aracılığıyla tam olarak bir ProductCategoryID ile ilişkili olabilir.
Aşağıdaki adımlarda bire bir ilişki oluşturma adımları gösterilmektedir:
Şema gezgini bölmesinde, bir türün yanındaki üç noktayı seçin ve ardından İlişkileri yönet seçeneğini belirleyin. İlişkileri yönet ekranı görüntülenir.
Yeni ilişki'yi seçin. Bu örnekte, her iki türde de bulunan ProductCategoryID alanını temel alarak Ürün türü ile ProductCategory türü arasında yeni bire bir ilişki oluşturuyoruz. Kardinalite için Bire bir'i seçiyoruz, Kimden ve Son türlerini ve ardından bu ilişkinin Kimden ve Son alanlarını seçiyoruz.
Not
Kimden ve Son alan seçicilerinde birden çok alan seçebilirsiniz. Bu özellik, birden çok alan içeren ilişkiler oluşturmanıza olanak tanır.
İlişki oluştur'u seçin. İlişki listenize yeni oluşturulan ilişki gösterilir.
İlişkileri yönet ekranını kapatmak için sağ üst köşedeki X işaretini seçin.
Bire çok (1:N) ve çoka çok (M:N) ilişkileri
Bire bir ilişkiler basit olsa da, bire çok ve çoka çok ilişkiler, gerçek dünya uygulamalarında yaygın olan daha karmaşık veri desenlerini işlemek için kullanılır. Bu ilişkileri oluşturma işlemi bire bir gibidir, ancak kardinalite seçimi GraphQL'in ilişkiyi nasıl yorumlayıp ortaya çıkardığını belirler.
Bire çok (1:N) ilişkileri
Bire-çok ilişkisi, bir türdeki tek bir kaydı farklı bir türdeki birden çok kayda bağlar. Örneğin, tek ProductCategory bir kayıt birçok Product kayıt içerir, ancak her Product biri yalnızca bir kategoriye aittir.
ProductCategory ile Product arasında bire çok ilişkisi oluşturmak için kardinalite olarak Bire çok'u seçin. Birebir ilişkilerle aynı adımları izleyin, ancak kardinalite ayarı GraphQL'e bir kategorinin birçok ürünle ilişkili olduğunu bildirir.
Çoka çok (M:N) ilişkileri
Çoka çok ilişkisi, her iki tarafın da birden çok ilişkili kaydı olabileceği şekilde kayıtları bağlar. Örneğin, bir SalesOrderHeader birden çok Product kayıt içerebilir ve her Product bir kayıt birden çok siparişte görünebilir. Bu ilişkiler, iki ana tür arasındaki bağlantıları depolamak için bir bağlantı türü (birleşim tablosu) gerektirir.
SalesOrderHeader ile Product arasında çoka çok ilişki oluşturmak için SalesOrderDetail bağlantı türüne sahip olmanız gerekir. Bu bağlama türü, ilişkilendirmek istediğiniz her iki türü de işaret eden yabancı anahtarlar içerir.
Çoka çok ilişkisini oluşturmak için:
- Şema gezgini bölmesinde, bir türün yanındaki üç noktayı seçin ve ardından İlişkileri yönet seçeneğini belirleyin. İlişkileri yönet ekranı görüntülenir.
- Yeni ilişki'yi seçin.
-
Kardinalite: Çoka Çok'ı seçtiğinizde bağlama için ek alanlar görüntülenir.
- Türden:SalesOrderHeader'ı seçin (ilişkinin bir tarafı)
- Bağlama türü: SalesOrderDetail (siparişleri ürünlere bağlayan birleşim tablosu) öğesini seçin
- Alanlardan: SalesOrderID (SalesOrderHeader'da bağlantı türüne bağlanan alan) öğesini seçin
- Alanlardan bağlanma: SalesOrderID (SalesOrderDetail içinde SalesOrderHeader'a bağlanan eşleşen alan) öğesini seçin
- Yazmak için: Ürün 'u seçin (ilişkinin diğer tarafı)
- Alan(lar)a: ProductID'yi seçin (Ürün'deki bağlantı türüne bağlanan alan)
- Alanlara bağlanma: ÜrünKimliği'ni seçin (SalesOrderDetail'te Product'a bağlanan eşleşen alan)
Anahtar kavramı: bağlama türü (SalesOrderDetail) iki yabancı anahtara sahiptir; biri ilişkilendirmek istediğiniz türlerin her birine işaret ediyor. "Alanlardan bağlanma" ve "Alanlara bağlanma" her ikisi de bağlama türündeki alanlarken, "Kaynak alan(lar)dan" ve "Hedef alan(lar)a" ilgili türlerde yer alır.
Çoka çok ilişkiler için dikkat edilmesi gerekenler
Çoka çok ilişki oluşturduğunuzda, GraphQL'in otomatik olarak oluşturduğu şey, bağlantı türünüzün iki yabancı anahtar dışında ek alanlara sahip olup olmamasına bağlıdır.
Genel kural:
- Bağlama türü, genellikle yabancı anahtarların ötesinde ek alanlara sahipse, GraphQL, bu bağlantı türünü açığa çıkaran dört bire çok ilişki oluşturur. Bu, sorgularınızdaki bu ek alanlara erişmenizi ve her iki yöndeki türler arasında gezinmenizi sağlar.
- Bağlama türü yalnızca iki yabancı anahtara sahipse (daha az yaygın), GraphQL yalnızca doğrudan çoka çok ilişkisi oluşturur. Bağlama türüne başvurmadan doğrudan iki ana tür arasında sorgu yapabilirsiniz.
Türü ek alanlarla bağlama (tipik senaryo)
Gerçek dünya senaryolarının çoğunda, ilişkilendirme türünüzün iki yabancı anahtarın ötesinde alanları vardır. Birleşim tabloları genellikle yalnızca hangi kayıtların ilişkili olduğuyla değil, bunların nasıl ilişkili olduğuyla ilgili ayrıntıları da içeren ilişki hakkındaki bilgileri depolar.
Çoka çok ilişkisini oluşturduğunuzda, API ilişki listenizde görünen dört ilişki oluşturur. Neden dört? Çünkü üç tür arasında çift yönlü gezintiye ihtiyacınız vardır.
Örneğin, SalesOrderDetail , OrderQtyveya UnitPrice (yalnızca UnitPriceDiscount ve SalesOrderIDdışında) gibi ProductIDek alanlar içeriyorsa portalda şu dört ilişkiyi görürsünüz:
- SalesOrderHeader → SalesOrderDetail (bire çok): Bir siparişten başlayın ve miktarları ve fiyatları görmek için tüm satır öğelerini listeleyin
- SalesOrderDetail → SalesOrderHeader (çoktan bire): Bir satır öğesinden başlayıp hangi siparişe ait olduğunu görmek için geri dönün
- Ürün → SatışSiparişiDetayları (bire çok): Bir üründen başlayarak, miktarlarıyla birlikte göründüğü tüm siparişleri inceleyin.
- SalesOrderDetail → Ürün (çoka bir): Bir satır öğesinden başlayın ve hangi ürünün sipariş edildiğine bakın
Bu dört ilişki, SalesOrderHeader, Product veya SalesOrderDetail gibi herhangi bir türden başlayıp başka bir türe gitme esnekliği sağlar ve yalnızca bağlama türünde bulunan OrderQty ve UnitPrice gibi ek alanlara erişim imkanı sunar.
Türü yalnızca yabancı anahtarlarla bağlama
SalesOrderDetailyalnızcaSalesOrderID ve ProductID (başka alan içermiyor) içeriyorsa, API portalda göreceğiniz iki bire çok ilişkisi oluşturur:
- SalesOrderHeader → SalesOrderDetail (bire çok)
- Ürün → SalesOrderDetail (bire-çok)
Bu senaryoda sorgular, GraphQL sorgularınızda bağlantı türüne açıkça başvurmadan doğrudan siparişlerden ürünlere (ve tersine) gidebilir. Bağlantı türü var ancak ek veri içermediğinden değer eklemez.
İlişki silme
Artık gerekli olmayan veya yanlış oluşturulmuş ilişkileri kaldırabilirsiniz. bir ilişki silindiğinde türler kendileri silinmez; yalnızca aralarındaki bağlantı kaldırılır.
İlişkiyi silmek için:
Şema gezgini bölmesinde, ilişkileri olan bir türün yanındaki üç noktayı seçin ve ardından İlişkileri yönet'i seçin. Seçili tür için tüm ilişkileri gösteren İlişkileri yönet ekranı görüntülenir.
Silmek istediğiniz her ilişkinin yanındaki onay kutusunu seçin. Tek bir işlemde silmek için birden çok ilişki seçebilirsiniz.
Araç çubuğundan Sil’i seçin.
Sorulduğunda silme işlemini onaylayın. İlişki GraphQL şemanızdan kaldırılır.
Tavsiye
Çoka çok ilişki oluşturduysanız ve ilişkiyi kaldırmak istiyorsanız, oluşturulan dört ilişkiyi (veya bağlantı türü yalnızca yabancı anahtarlara sahipse iki ilişkiyi) silmeniz gerektiğini unutmayın. Her ilişki, ilişki listesinde ayrı bir girdi olarak görünür.