Ana içeriğe geç

İlişkisel Veritabanı Sorgusu

Emakin, ilişkisel veritabanlarıyla etkileşim için sadelik ve güvenliğe öncelik veren özel bir sorgu modeli kullanır. SQL olmayan bu model, hem iş kullanıcılarının hem de geliştiricilerin erişebileceği kullanıcı dostu bir arayüz sunar. Emakin, veritabanında yürütülmek üzere bu sorgu modelini dahili olarak SQL'e dönüştürür. Birleştirme, gruplama ve having yan tümceleri gibi karmaşık SQL kavramları, sağlanan sorgu modeline göre Emakin sistemi tarafından otomatik olarak işlenir.

Sorgu İfadeleri

Sorgu ifadeleri, tablo alanlarını benzersiz biçimde tanımlar. Belirsizliği önlemek için şu biçimlerden birini izler: Field, Relation.Field, veya Relation.Relation.Field, belirsizliği önler.

Örneğin, Customers.Name ifadesi Name tablosundaki alanı belirtir. Sorgu ifadeleri, sorgu modelinin hem Customers hem de Columns bölümlerinde kullanılır. Criteria

Bir Customers tablo ele alındığında, aşağıdaki ifadeler ilişkili verilere nasıl erişilebileceğini gösterir:

  • Name -> Customers.Name
  • Orders.Amount -> Orders.Amount
  • Orders.Product.Name -> Products.Name
  • Orders.Product.Category.Name -> Categories.Name

İfade İşlevleri

Temel alan referanslarının yanı sıra sorgu modeli, gelişmiş veri işleme ve toplama için işlev çağrılarını da destekler.

Matematiksel İşlevler

Sütun ifadelerinde matematiksel işlemler kullanılabilir:

  • Toplama: A + B
  • Çıkarma: A - B
  • Çarpma: A * B
  • Bölme: A / B

Bu matematiksel işlevlerin yorumunun doğrudan SQL'e çevrildiğini ve sonuçların temel alınan veritabanı sistemine bağlı olarak biraz farklılık gösterebileceğini unutmayın.

Değer İşlevleri

  • Now(): Geçerli tarih ve saati döndürür.

Tarih ve Saat İşlevleri

  • DatePart(part, date): Bir tarih değerinin belirtilen bölümünü çıkarır. part şunlardan biri olabilir: 'Year', 'Quarter', 'Month', 'Week', 'Day', 'Hour', 'Minute', 'Second'. Örnek: DatePart('Year', Orders.OrderDate)

  • DateDiff(part, date1, date2): İki tarih arasındaki farkı hesaplar. part ile aynı değerleri kullanır DatePart. Örnek: DateDiff('Day', Orders.OrderDate, Orders.ShipDate)

  • DateTrunc(part, date): Bir tarih değerini belirtilen bölüme göre keser. part ile aynı değerleri kullanır DatePart. Örnek: DateTrunc('Month', Orders.OrderDate)

Toplama İşlevleri

Toplama işlevleri birden çok değer üzerinde çalışarak tek bir sonuç döndürür:

  • Count(): Satır sayısını sayar.
  • Sum(): Değerlerin toplamını hesaplar.
  • SumDistinct(): Benzersiz değerlerin toplamını hesaplar.
  • Avg(): Değerlerin ortalamasını hesaplar.
  • AvgDistinct(): Benzersiz değerlerin ortalamasını hesaplar.
  • Min(): En küçük değeri döndürür.
  • Max(): En büyük değeri döndürür.
  • StdDev(): Standart sapmayı hesaplar.

Sorgu Modelinin Gösterimi

Emakin sorgu modeli XML veya JSON kullanılarak gösterilebilir. Form sorgu tasarımcısı XML kullanırken, örneğin \$Database.GetData gibi komut dizisi işlevleri JSON kullanır.

Örnek (XML):

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
<Query>
    <Parameters>
        <TargetSchema>CRM</TargetSchema>
        <TargetTable>Clients</TargetTable>
    </Parameters>
    <Columns>
        <Column Expression="Name"/>
        <Column Expression="Orders.Amount"/>
        <Column Expression="Orders.Product.Name"/>
    </Columns>
    <Where Condition="And">
        <Criteria>
            <Criteria Expression="Orders.Product.Name" Comparison="Equals" Condition="And">
                <Value>Apple</Value>
            </Criteria>
        </Criteria>
    </Where>
    <Order>
        <Order Expression="Orders.Product.Name" Type="Ascending"/>
    </Order>
</Query>

Örnek (JSON):

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
{
    "Parameters": {
        "TargetSchema": "CRM",
        "TargetTable": "Clients"
    },
    "Columns": [
        {
            "Expression": "Name"
        },
        {
            "Expression": "Orders.Amount"
        },
        {
            "Expression": "Orders.Product.Name"
        }
    ],
    "Where": {
        "Condition": "And",
        "Criteria": [
            {
                "Expression": "Orders.Product.Name",
                "Comparison": "Equals",
                "Condition": "And",
                "Value": "Apple"
            }
        ]
    },
    "Order": [
        {
            "Expression": "Orders.Product.Name",
            "Type": "Ascending"
        }
    ]
}

Bu örnekler, "Apple" adlı ürünlerin bulunduğu siparişleri filtreleyip sonuçları ürün adına göre sıralayarak Orders şemasındaki CRM tablosundan veri almak için sorgunun nasıl oluşturulacağını gösterir.