Edgedb Computed Links

[en] Read in English

2023-04-12

Computed Links, iki nesne arasındaki ilişkileri tanımlamak için kullanılan bir yapıdır. Bu bağlantılar, ilişkilendirilmiş nesnelerin birbirine olan ilişkisini hesaplamak için tanımlanmış bir sorgu veya fonksiyon kullanarak oluşturulur.

Bu yapı, veritabanında tutulan verilerin tutarlılığını sağlamak için oldukça yararlıdır. Computed Links, veriler arasında sıkı bir şekilde bağlantı kurmanın yanı sıra, veritabanında saklanan verilerin değiştirilmesi veya güncellenmesi durumunda bağlantıların otomatik olarak güncellenmesini sağlar.

Ayrıca, sorgulama ve raporlama işlemlerini kolaylaştırmak için de kullanılabilir. Örneğin, bir Computed Link aracılığıyla iki nesne arasındaki ilişkiyi hesaplayarak, sorgulama işlemini daha verimli hale getirebilirsiniz.

Bu yapı, edgedb’nin yüksek performanslı ve verimli veritabanı motoru sayesinde, büyük ve karmaşık veri modellerinde de kullanılabilir.

Örneğin, bir e-ticaret web sitesi için, bir siparişin birden fazla ürünü olabilir ve her bir ürünün stok seviyesi, priceı ve diğer özellikleri farklı olabilir. Bu durumda, sipariş ve ürünler arasında bir bağlantı kurmak için bir Computed Link kullanılabilir.

Tablo A, Order adıyla bir tablo olabilir ve siparişlerin numarası, tarihi, müşteri bilgileri ve diğer özelliklerini içerebilir. Tablo B ise Product adıyla bir tablo olabilir ve ürünlerin adı, stok seviyesi, fiyatı ve diğer özelliklerini içerebilir.

Bunun için, bir Computed Link kullanarak her bir siparişin birden fazla ürününe bağlanabilirsiniz. Örneğin, order_id alanını ve product_id alanını kullanarak bir Computed Link tanımlayabilirsiniz. Bu link, siparişler tablosundaki her bir siparişin ürünler tablosundaki ilgili ürüne bağlanmasını sağlayacaktır.

Aşağıdaki örnek, Edgedb dilinde bu Computed Link yapısının nasıl oluşturulacağını göstermektedir:

type Order {
  required property order_id -> str;
  required property created_at -> datetime;
  required link customers -> Customer;
  multi link products := (
    WITH
      order := (SELECT Order FILTER .order_id = <str>$self.order_id),
      order_product := (SELECT OrderProduct FILTER .order_id = order.order_id)
    SELECT Product FILTER .product_id = order_product.product_id
  );
}

type Product {
  required property product_id -> str;
  required property name -> str;
  required property price -> decimal;
  required property stock_level -> int16;
}

type OrderProduct {
  required link order -> Order;
  required link product -> Product;
}

Bu örnekte, Order ve Product adında iki ayrı tablo tanımlanmıştır. Order tablosunda, “products” adında bir Computed Link tanımlanmıştır. Bu link, Order tablosundaki her bir siparişin Product tablosundaki ilgili ürüne bağlanmasını sağlar.

Computed Link yapısında, multi link kullanılarak birden çok ilişki belirtilir. Bu örnekte, “multi link products” ifadesiyle her bir siparişin birden fazla ürüne bağlanması sağlanır.

Computed Link’in WITH ifadesi içinde yer alan sorgu, ilişkili nesnelerin belirlenmesinde kullanılır. Bu örnekte, her bir siparişin ürünlerini belirlemek için order adıyla bir değişken oluşturulmuş ve daha sonra bu değişken kullanılarak order_product adlı bir başka değişken oluşturulmuştur. Bu sorgu, belirtilen siparişin ürünlerini içeren OrderProduct nesnelerini filtrelemek için kullanılmaktadır.

Computed Link, sonrasında SELECT ifadesi ile birlikte kullanılarak, ilişkili nesnelerin belirlenmesinde kullanılır. Bu örnekte, Computed Link, SELECT Product ifadesiyle ilişkili ürünleri seçmek için kullanılmıştır.

Order ve Product tabloları arasında bir Computed Link kullanılarak her bir siparişin birden fazla ürüne bağlanması sağlanmıştır. Bu bağlantı, verilerin tutarlılığını sağlamak, sorgulama işlemlerini kolaylaştırmak ve veri modelinin daha esnek olmasını sağlamak için oldukça yararlıdır.

Yukarıdaki örnekteki tabloları ve Computed Link’i kullanarak bir sorgu örneği yazalım. Sorgulama işlemi, her bir siparişin numarasını ve o siparişe ait ürünlerin isimlerini ve pricelarını listelemek olacaktır.

SELECT
  s.order_id,
  ARRAY_AGG(u.name) AS product_name,
  ARRAY_AGG(u.price) AS product_price
FROM
  Order s
  LEFT JOIN OrderProduct su ON s.order_id = su.order.order_id
  LEFT JOIN Product u ON su.product.product_id = u.product_id
GROUP BY
  s.order_id;

Bu sorgu, Order ve OrderProduct tablolarını birleştirerek, her bir siparişin ürünlerini belirlemek için Computed Link’i kullanmaktadır. Sonuç olarak, her bir siparişin numarası ve o siparişe ait ürünlerin isimleri ve fiyatları listelenmektedir.

LEFT JOIN ifadesi kullanılarak, bazı siparişlerin henüz ürünleri olmadığı durumlarda bile sonuçlar görüntülenebilir. GROUP BY ifadesi ise her bir siparişin ürünleri birleştirildiğinde, her bir sipariş için yalnızca bir satır oluşturulmasını sağlar.



Bu gibi daha fazla gönderi...

Edgedb İlişkiler

2023-04-12 | #edgedb #edgedb-links #edgedb-multi-link

Edgedb’de iki tablo arasında ilişki kurmak için link anahtar kelimesi kullanılır. Linkler, bir objenin başka bir objeyle ilişkilendirilmesine izin verir. Örneğin, bir User tablosu ve bir Article tablosu varsa, Article tablosundaki her bir Article, bir Userya atfedilebilir. Bu durumda, User ve Article tabloları arasında bir ilişki kurabiliriz. İlk olarak, User tablosunda bir id özelliği tanımlarız. Bu özellik, kullanıcının benzersiz bir kimliğini temsil eder. type User { required property id -> uuid; property name -> str; } Ardından, Article tablosunda bir author özelliği tanımlarız.

Devamı 


Edgedb Exclusive Constraint

2023-04-12 | #edgedb #edgedb-constraints

Edgedb’de exclusive constraint (özel kısıtlama) terimi, belirli bir özelliğin benzersiz olmasını veya belirli bir aralıkta olmasını sağlayan bir kısıtlama türünü ifade eder. Örneğin, bir User objesinde email özelliğinin benzersiz olmasını sağlayan bir özel kısıtlama oluşturabilirsiniz. Böylece, her bir User’ın sadece bir kez kaydedilmesini sağlayabilirsiniz. Aşağıdaki örnekte, email özelliğinde benzersizlik sağlayan bir özel kısıtlama tanımlıyoruz: type User { required property id -> uuid; required property name -> str; exclusive constraint unique_email on (.

Devamı 


Edgedb Computed Properties

2023-04-12 | #edgedb #edgedb-properties

Computed properties (hesaplanmış özellikler), veri modellerinde kullanılan çok yararlı bir kavramdır. Hesaplanmış özellikler, veritabanında saklanmayan ancak sorgulama esnasında hesaplanan özelliklerdir. Bu özellikler, veritabanı yapılarını daha esnek hale getirir ve verilerinizi daha verimli bir şekilde depolamanıza olanak tanır. Edgedb, hesaplanmış özellikleri destekleyen modern bir veritabanı yönetim sistemidir. edgedb’de, hesaplanmış özellikleri tanımlamak için birkaç yöntem vardır. Bir hesaplanmış özellik tanımlamak için, property ifadesini kullanarak bir özellik oluşturabilirsiniz. Özellik oluştururken, expr anahtar kelimesini kullanarak hesaplanmış özellik için bir ifade belirleyebilirsiniz.

Devamı 