ORM veya düz SQL mi kullanıyorsunuz? [kapalı]


246

Geliştirdiğim bazı uygulamalar için (daha sonra unutmaya devam ettim), öncelikle MySQL için düz SQL yazıyorum. SQLAlchemy gibi pythonlarda ORM'leri kullanmama rağmen , onlarla uzun süre yapışmadım . Genellikle beni tutan belge ya da karmaşıklık (benim açımdan) idi.

Ben şöyle görüyorum: sadece bir tür veritabanı kullanacaksa, taşınabilirlik için bir ORM, düz SQL kullanın. Veritabanı desteğine ihtiyaç duyan bir uygulama geliştirirken ORM veya SQL'in ne zaman kullanılacağına dair gerçekten tavsiye arıyorum.

Bunu düşünmek, bir ORM kullanmak yerine veritabanı tutarsızlıklarını yönetmek için hafif bir sargı kullanmak çok daha iyi olurdu.


Standardizasyon, güvenlik, sürdürülebilirlik, dil soyutlama, KURU vb.
Ben

ORM ile Performans SQL yakın olabilir, doğru kullanırsanız bağlıdır ve doğru ayarlarla ... daha hızlı EF6.x 5x yapmak ho bakınız: linkedin.com/pulse/...
Bahi

: ORM mimarisi için ve, işte başka bağlantı var (kaçınmalı) nasıl yapılır linkedin.com/pulse/...
Bahi

Nesne İlişkisel haritalama (ORM) zaten birçok programlama dilinde çok popüler ve SQL için en iyi alternatiflerden biri. TRIADB projem için CQL oluşturmak için yöntem zincirleme tarzından ilham aldım. healis.eu/triadb/#latest-release
Athanassios

3
Bu sorunun kapalı olması aptalca.
Mitch Wheat

Yanıtlar:


169

ORM'lerin bazı hoş özellikleri var. Veritabanı sütunlarını nesne alanlarına kopyalamanın köpek işlerinin çoğunu yapabilirler. Genellikle dilin tarih ve saat türlerini uygun veritabanı türüne dönüştürürler. Genellikle iç içe nesneleri somutlaştırarak birebir ilişkileri oldukça zarif bir şekilde ele alırlar. Veritabanınızı ORM'nin güçlü ve zayıf yönlerini göz önünde bulundurarak tasarlarsanız, veritabanının içine ve dışına veri almak için çok fazla iş tasarrufu sağladığını buldum. (Bunları eşlemeniz gerekiyorsa, polimorfizmi ve çoktan çoğa ilişkileri nasıl ele aldığını bilmek isteyeceksiniz. Bazılarını ORM'yi 'bilgisayar biliminin vietnam'ı' yapan 'empedans uyumsuzluğunun' çoğunu sağlayan bu iki alan. .)

İşlemsel olan uygulamalar için, yani bir istekte bulunursunuz, bazı nesneler alırsınız, bazı verileri almak ve bunları bir Web sayfasında işlemek için onları hareket ettirirsiniz, performans vergisi küçüktür ve çoğu durumda ORM, nesneleri önbelleğe alacağı için daha hızlı olabilir daha önce görüldüğü gibi, aksi takdirde veritabanını birçok kez sorgulamış olur.

Raporlama açısından ağır olan veya istek başına çok sayıda veritabanı satırıyla ilgilenen uygulamalar için, ORM vergisi çok daha ağırdır ve yaptıkları önbellek büyük, işe yaramaz bir bellek yükü yüküne dönüşür. Bu durumda, basit bir SQL eşlemesi (LinQ veya iBatis) veya ince bir DAL'deki elle kodlanmış SQL sorguları gitmenin yoludur.

Her iki yaklaşımı kullanarak kendinizi bulacağınız büyük ölçekli herhangi bir uygulama için buldum. (Basit CRUD için ORM ve raporlama için SQL / ince DAL).


'İstek başına çok sayıda veritabanı satırı' tanımlayabilir misiniz? Lütfen :)
Mosselman

Yani örneğin JPA'yı IBatis ile entegre edebilir miyim? VE onları aynı işlemde çalıştırabilir misiniz?
Jaime Hablutzel

2
Kimsenin tartışmayacağı bir diğer husus temel devlet yönetimidir. Tüm bu çerçeve yığını (JSF, JPA, vb.) Java fasulye alma / ayarlama yöntemlerine dayanmaktadır. Bu, her tablo için, her sütun için bir TON kazan plakasıdır ve ... işte gerçek anti-desen: Her alanı herkese açıkmış gibi göstermek için. Aslında, bir nesne / tablo / satırdaki alanlar üzerinde bir get / set yöntemine sahip olmak, her bir bilgi gizleme ve kapsülleme kiracısını ihlal etmeye çok yakındır. Son olarak, devlet yönetimine geri dönersek ... değişmezlik seçeneği nerede? Yarı ayarlı nesnelere izin verilebilir mi veya verilmelidir mi? En çok seçenek yok.
Mart'ta Darrell Teague

2
Bu cevapta önemli bir ifadeye odaklanmak ve özellikle anlaşmak istiyorum. "İstek başına çok sayıda veritabanı satırı ile ilgilenen uygulamalar için ORM vergisi çok daha ağırdır". ORM yalnızca geliştiriciler ve bakım için iyidir, çünkü çoğu geliştirici SQL'de çok iyi değildir, ancak aslında performanstan bahsediyorsanız, SQL tamamen onu koyar.
17'de Manachi

"çoğu geliştirici SQL'de çok iyi değil" ??? Çoğu geliştiricinin LINQ, ifade ağaçlarının gücü ve genel olarak ORM'lerin, kod üretiminin ve diğer birçok şeyin düzgün bir şekilde nasıl kullanılacağını bilmediğini söyleyebilirim. Ama hayır, böyle güçlü bir açıklama yapmak için hiçbir temelim yok.
Adanay Martín

253

Hibernate, EclipseLink, Toplink, OpenJPA ve diğerlerini içeren JPA (Java Persistence API, temelde Java / J2EE / EJB için standart ORM API) ile çalışmak için biraz zaman harcayan biri olarak konuşurken, gözlemler.

  1. ORM'ler hızlı değildir. Yeterli olabilir ve çoğu zaman yeterli olur, ancak yüksek hacimli düşük gecikmeli bir ortamda hayır-hayırdır;
  2. Java ve C # gibi genel amaçlı programlama dillerinde, onları çalıştırmak için çok fazla sihire ihtiyacınız vardır (örneğin, Java'da yükleme zamanı dokuma, enstrümantasyon, vb.);
  3. Bir ORM kullanırken, SQL'den (amaç gibi görünüyor) uzaklaşmak yerine, ORM'nizin performans SQL'i üretmesini sağlamak için XML ve / veya ek açıklamaları / nitelikleri ayarlamak için ne kadar zaman harcadığınıza şaşıracaksınız;
  4. Karmaşık sorgular için, gerçekten bir yedek yoktur. JPA'da olduğu gibi, sadece ham SQL'de mümkün olmayan bazı sorgular vardır ve JPA'da ham SQL kullanmanız gerektiğinde güzel değildir (C # /. Net en azından dinamik türlere sahiptir - var - ki bu çok fazla Object dizisinden daha güzel);
  5. ORM'leri kullanırken çok fazla "gotchas" var. Buna istenmeyen veya beklenmedik davranışlar da dahildir, veritabanınıza SQL güncellemeleri yapabilme yeteneğini (JPA veya benzer yöntemlerde refresh () kullanarak) oluşturmanız gerekir, çünkü JPA varsayılan olarak her şeyi önbelleğe alır, böylece doğrudan bir veritabanını yakalamaz güncelleme - doğrudan SQL güncellemelerini çalıştırmak yaygın bir üretim destek faaliyetidir);
  6. Nesne-ilişkisel uyumsuzluk her zaman sorun yaratacaktır. Böyle bir sorunla soyutlamanın karmaşıklığı ve bütünlüğü arasında bir denge vardır. Zaman zaman JPA'nın çok ileri gittiğini ve isabetin karmaşıklığının soyutlama ile haklı olmadığı gerçek bir azalan getiriler yasasına çarptığını hissettim.

Biraz daha açıklama gerektiren başka bir sorun daha var.

Bir Web uygulaması için geleneksel model, bir kalıcılık katmanına ve bir sunum katmanına sahip olmaktır (muhtemelen bir hizmet veya diğer katmanlar arasında olmakla birlikte, bunlar bu tartışma için önemli ikidir). ORM'ler kalıcılık katmanınızdan sunum katmanına (yani varlıklarınıza) katı bir görünümü zorlar.

Daha ham SQL yöntemlerinin eleştirilerinden biri, tek bir sorgu tarafından kullanılan tüm bu VO'lara (değer nesneleri) veya DTO'lara (veri aktarım nesneleri) sahip olmanızdır. Bu, ORM'lerin bir avantajı olarak lanse edilir, çünkü bundan kurtulursunuz.

Bu problemler ORM'lerde ortadan kalkmıyor, sadece sunum katmanına geçiyorlar. Sorgular için VO'lar / DTO'lar oluşturmak yerine, genellikle her görünüm için bir tane olmak üzere özel sunum nesneleri oluşturursunuz. Bu nasıl daha iyi? IMHO değil.

Bunu ORM veya SQL'de yazdım : Henüz orada değil miyiz? .

Bugünlerde tercih ettiğim inat teknolojisi (Java'da) ibatis. JPA'nın yapabileceği şeylerin% 90'ını + yapan çok ince bir sarıcıdır (iyi belgelendirilmemiş olmasına rağmen ilişkilerin tembel yüklemesini bile yapabilir) ancak çok daha az yük ile (karmaşıklık ve gerçek kod açısından).

Bu geçen yıl yazdığım bir GWT başvurusunda ortaya çıktı. EclipseLink'ten hizmet uygulamasında sunum nesnelerine çok sayıda çeviri. Eğer ibatis kullanıyor olsaydık, ibatis ile uygun nesneleri yaratmak ve daha sonra yığını yukarı ve aşağı doğru geçirmek çok daha kolay olurdu. Bazı saflar bunun Bad ™ olduğunu iddia edebilirler. Belki de (teoride) ama size şunu söyleyeyim: daha basit bir kod, daha basit bir yığın ve daha fazla üretkenlik yaratırdı.


2
Ben sadece böyle şeyler hakkında kaynak toplamak için (topluluk wiki'd rağmen) başka bir soru göndermek için ilham aldım. Son paragrafla ilgili olarak: Basitliği severim. Muhtemelen çok fazla.
hydrapheetz

3
IBATIS harika, ama belki de JOOQ : jooq.sourceforge.net denemek isterdiniz . Ana odak noktası, belirttiğiniz 6 nedenden dolayı SQL'e yakın kalmaktır.
Lukas Eder

5
3. puan için +1. Birçoğu ORM kullanmanın sizi SQL hakkında kapsamlı bir anlayışa sahip olmaktan kurtardığını düşünmektedir. Şey, SQL ile jimnastik yapmayı / öğrenmeyi öğrendiğinizde, muhtemelen kendinizi ORM'den uzaklaşırken bulacaksınız ... çok hızlı.
Ryan Fernandes

4
Şimdi, 2013'ün sonu ve hepimizin bildiği gibi, hiçbir şey "eski gerçeklerden" daha yanıltıcı olamaz - bu yüzden puanlarınızın hala aynı olup olmadığını sorabilir miyim? Değilse, bir blog yazısı yazabilir / cevabınızı buna göre güncelleyebilirsiniz.
Dominik

3
var. NET'te dinamik bir tür üretmez, dinamik anahtar kelimeye sahip değişkenler .NET'te dinamik türlerdir. var hala statik yazımdır. Bkz. Stackoverflow.com/questions/961581/…
Fazi

45

R eads için düz SQL , CUD için ORM diyorum .

Performans, özellikle web uygulamalarında her zaman endişe duyduğum bir şey, aynı zamanda kod sürdürülebilirliği ve okunabilirliği. Bu sorunları çözmek için SqlBuilder yazdım .


1
CUD nedir? Tanımı bulamıyorum.
Kimchi Man

27
@KimchiMan RUD olmadan R.
Max Toro

3
CUD - Oluşturun, güncelleyin, silin.
birleştirin

14

ORM sadece taşınabilirlik değildir (bu konuda ORM'lerle bile başarılması oldukça zordur). Bir ORM aracı, kaynak plakası SQL sorguları yazmaktan (PK tarafından veya tahminler, ekler, güncellemeler ve silmelerle seçer) sizi kurtardığında ve sorun alanına konsantre olmanıza izin verdiğinde, temel olarak kalıcı bir mağaza üzerinde bir soyutlama katmanıdır.


3
Veritabanı lezzetleri arasında taşınabilirliğe daha yakın bir şey düşünüyordum. Gece geç saatlerde soru göndermemeliyim.
hydrapheetz

1
Ben de tam olarak bunu söylüyordum: en temel senaryolar bile farklı DBMS'lerde hatalara maruz kalabilir - örneğin, NULL'ların farklı kullanımı.
Anton Gogolev

Bir ORM, nesneler arasındaki ilişkiler üzerinde bir soyutlama katmanı sağlar, ancak bahsettiğiniz ortak levha sorguları açısından büyük bir avantaj yoktur. Bir JDBC uygulamasında, bu tür sorguları soyut bir üst sınıf veya yardımcı program sınıfında az miktarda kodla yazabilirsiniz. Her bir yeni tablo için kazan plakasını tekrarlamaya gerek yoktur.
Kevin Stembridge

11

Saygın herhangi bir tasarım, sadece empedans uyumsuzluğunu işlemek için veritabanı için bir miktar soyutlamaya ihtiyaç duyacaktır. Ama beklediğim en basit ilk adım (ve çoğu vaka için yeterli), ağır bir ORM değil, bir DAL olacaktır. Tek seçeneğiniz spektrumun sonundaki seçenekler değil.


DAL'ı ORM'den nasıl ayırt ettiğimi açıklamamı isteyen bir yoruma yanıt olarak DÜZENLE:

DAL, kendiniz yazdığınız şeydir, belki de sadece bir tabloyu kapsülleyen ve alanlarını özelliklerle eşleyen bir sınıftan başlayarak. ORM, dbms şemanızın çoğunlukla PK ve FK olmak üzere diğer özelliklerinden çıkarılan yazmadığınız veya soyutlama mekanizmalarınızdır. (Burada otomatik soyutlamaların sızmaya başlayıp başlamayacağını öğrenirsiniz. Onları kasıtlı olarak bilgilendirmeyi tercih ederim, ama bu sadece benim kişisel tercihim olabilir).


2
DAL ve ORM nedir arasındaki çizgiyi nerede çizersiniz?
kaos

4
Bir ORM'nin yazarı sizseniz, ORM'niz otomatik olarak tekrar DAL'a dönüşür? :)
Bombe

DAL = Kalıcı katman ve ORM, DUD içinde veri deposu içine CRUD işlemleri gerçekleştirmek için kullandığınız bir araçtır.
Vahid Ghadiri

7

Her aracın amacı ve vizyonu vardır. İBatis muhtemelen sizin için de iyi bir çözüm olsa da, http://www.jooq.org/ tam olarak ihtiyaçlarınıza uyacak şekilde oluşturdum .

JOOQ'nun temel ORM özellikleri vardır, ancak temel olarak çoğu geliştiricinin ihtiyaçları için en iyi ORM'yi bulmaya çalışırken en çok ihtiyaç duyduğu şeylere odaklanır:

  • kod üretimi
  • değişken bağlanma (bu JDBC'de bir acıdır)
  • SQL sözdizimi soyutlama (sözdizimi hatalarını önlemek için)

Ancak genellikle çok ileri giderler ve çok fazla soyutlama sağlarlar, bir RDBMS'ye karşı koştuklarını düşünmezsiniz. Öte yandan, bir RDBMS'yi tam olarak seçtiniz çünkü

  • sağlam bir veri kaynağıdır
  • SQL pek çok iyi, performanslı şey yapabilir (iç içe seçimler, birlikler, karmaşık birleşimler, vb.). Çoğu zaman ORM'ler bunları yapamaz.
  • işlemleri ve oturumları kendiniz halledebilirsiniz
  • UDT'leriniz ve saklı prosedürleriniz var

JOOQ tam olarak bu noktalara değinir. JDBC'nin yanı sıra acı çekmeden de performans gösterecek.


6

Bir çerçevenin kullanılıp kullanılmayacağı ikilemi günümüz yazılım geliştirme senaryosunda oldukça yaygındır.

Anlamak önemli olan, her çerçevenin veya yaklaşımın artıları ve eksileri vardır - örneğin deneyimlerimize göre ORM'nin işlemlerle, yani ekleme / güncelleme / silme işlemleri ile uğraşırken - ancak karmaşık ile veri almak söz konusu olduğunda faydalı olduğunu bulduk Sonuçlar ORM aracının performansını ve etkinliğini değerlendirmek önem kazanmaktadır.

Ayrıca, bir çerçeve ya da yaklaşım seçmenin ve içindeki her şeyi uygulamanın zorunlu olmadığını anlamak da önemlidir. Bununla kastettiğimiz, ORM ve yerel sorgu dilinin bir karışımına sahip olabiliriz. Birçok ORM çerçevesi yerel SQL'de eklentiye uzantı noktaları verir. Bir çerçeveyi veya yaklaşımı aşırı kullanmamaya çalışmalıyız. Belirli çerçeveleri veya yaklaşımları birleştirebilir ve uygun bir çözümle gelebiliriz.

Ekleme, güncelleme, silme, yüksek düzeyde eşzamanlılık ile sürüm oluşturma söz konusu olduğunda ORM'yi kullanabilirsiniz ve rapor oluşturma ve uzun liste için Yerel SQL'i kullanabilirsiniz


3
ORM yüksek eşzamanlılık için neden daha iyi?
user359996

6

ORM'imi gerçekten uçuran anahtar kod üretimi idi. ORM yolunun kod performansı açısından en hızlı olmadığını kabul ediyorum. Ancak orta ila büyük bir ekibiniz olduğunda, DB derhal sınıfları ve eşlemeleri derleme sürecinin bir parçası olarak rejenere etme yeteneğini hızla değiştirir, özellikle CI kullandığınızda görülmesi parlak bir şeydir. Kodunuz en hızlı olmayabilir, ancak kodlamanız olacaktır - Çoğu projede hangisini alacağımı biliyorum.

Benim önerim şema hala akıcı iken bir ORM kullanarak geliştirmek, darboğazları bulmak için profilleme kullanmak, sonra ham Sql kullanarak ihtiyacı olan alanları ayarlamak.

Başka bir düşünce, Hazırda Bekletme içine yerleşik önbellekleme doğru şekilde kullanılırsa genellikle büyük performans iyileştirmeleri yapabilirsiniz. Artık referans verilerini okumak için DB'ye geri dönmenize gerek yok.


2
Kesinlikle kişisel zevk meselesi. Bana göre kod üretimi bir kusur.
dkretz

5
İkinci paragrafı okuyun .... belki tamlık da yararlıdır
MrTelly

Kod oluşturma, belirli görevleri daha hızlı gerçekleştirmenin tek yoludur. Tüm araçlar gibi güçlü olabilir ya da felakete yol açabilir. Teknik olarak tüm diller diğer kod türlerini üretmektedir.
Banjocat

4

'One-tool-fits-all' çözümü yoktur ve bu 'a veya m'yi kullanmalı mıyım yoksa kullanmamalı mıyım? '.

Ben söyleyebilirim: çok 'man' odaklanmış bir uygulama / araç yazmak zorunda kalırsanız, başka bir mantık olmadan, o zaman SQL bu tür uygulamalar için etki alanına özgü dil olduğundan, düz SQL kullanacağım.

Öte yandan, çok sayıda 'domain' mantığı içeren bir işletme / kurumsal uygulama yazacak olsaydım, bu etki alanını kodla ifade edebilecek zengin bir sınıf modeli yazardım. Böyle bir durumda, bir OR / M haritacısı başarılı bir şekilde bunu yapmak için çok yararlı olabilir, çünkü bir sürü su tesisatı kodu elinizden çıkarır.


“Hiçbir 'tek-alet-herkese uyan' çözüm yoktur.
Rushino

1

Geliştirdiğim uygulamalardan biri python ile yazılmış bir IRC botuydu. Kullandığı modüller ayrı iş parçacıklarında çalışır, ancak sqlite kullanırken iş parçacığı işlemek için bir yol bulamadım. Yine de, bu ayrı bir soru için daha iyi olabilir.

Gerçekten hem başlığı hem de asıl soruyu yeniden gözden geçirmeliydim . Daha önce hiçbir dilde DAL kullanmamıştım.


4
Yapman gerektiğine inanıyorum. Her yerde ham SQL oldukça iğrenç.
kaos

İyi evet. Ben sahiptir, zaman zaman üzerinde kesmek forumu yazılım parçasıdır var ton yerde mysql_query () ve mysql_result () Herşeyden. Fındık.
hydrapheetz

Bahsettiğiniz bu "uygulama" şey nedir?
Zoran Pavlovic

Bu soru bir irc bot uygulaması üzerinden sorulan ve ne oldu (çok yararlı bir rehber) oldu komik! Bir irc bot uygulaması ölçeğin bir ucundadır ve üzerinde karmaşık eklemeler ve üzerinde çalışan 20+ geliştirici ile milyonlarca veri satırı içeren 50-100 + tabloya sahip bir uygulama, ölçeğin diğer ucundadır. Ölçeğin bir 'irc bot uygulaması' söz konusu olduğunda, zar zor önemli olduğunu söylemeye cesaret ediyorum.
Manachi

1

SQL gibi çalışan ancak derleme zamanı denetimleri ve tür güvenliği sağlayan bir ORM kullanın . En sevdiğim gibi: Veri Bilgi Nesneleri (açıklama: Yazdım)

Örneğin:

for (Bug bug : Bug.ALL.limit(100)) {
  int id = bug.getId();
  String title = bug.getTitle();
  System.out.println(id +" "+ title);
}

Tamamen akış. Kurulumu kolay (tanımlanacak eşleme yok - mevcut şemalarınızı okur). Birleştirme, işlemler, iç sorgular, toplama, vb destekler SQL'de yapabileceğiniz hemen hemen her şey. Ve dev veri kümelerinden (finansal zaman serileri) önemsiz olana (Android) kadar kanıtlanmıştır.


IDE'niz de bu tür statik kontrolleri doğrudan sağlayabilir (IDEA, DB yapısını, DB'nin nerede olduğunu / DDL dosyalarının nerede olduğunu söylediğiniz sürece bilir, böylece SQL sorgularınızda / prosedürlerinizde / her türlü işlemde tür kontrolleri / ilişki kontrolleri / vb. )
Xenos

bu yararlı. bunu bir build / CI adımının bir parçası olarak yapabilir mi? sql ve diğer dizeleri nasıl sınıflandırır? dize işleme veya yalnızca dize sabitleri işleyebilir?
keredson

Ben abBlock tarafından engellendi, ancak IntelliJ başka bir dil gibi SQL ayrıştırır alırsınız jetbrains.com/datagrip/features belki zaten belki SQL ayrıştırma kodu? Sonar izole etmek IJ takımı sorarak bir CI / CD / yapı (bunu entegre böylece böyle ayrıştırıcıya sahiptir). Ayrıştırma, veri türünü getirir, böylece onlara kontrol ekleyebilir (bunu özel bir eklenti ile yaptım) veya "JOIN sütunlarının bir FK? Dizini var mı?" Bunlar, yerel IJ'nin SQL denetimlerinde düzenli iyileştirmeler olacaktır
Xenos

1

Bu sorunun çok eski olduğunu biliyorum, ama benim gibi birinin karşılaşması durumunda cevap göndereceğimi düşündüm. ORM'ler çok yol kat etti. Bazıları size her iki dünyanın en iyisini verir: gelişimi daha üretken hale getirmek ve performansı sürdürmek.

SQL Verilerine bir göz atın ( http://sqldata.codeplex.com ). Tüm üsleri kapsayan c # için çok hafif bir ORM'dir.

FYI, SQL Data'nın yazarıyım.


1

"Orta yol var!" Diyen cevapların korosuna sesimi eklemek istiyorum.

Bir uygulama programcısı için SQL, kontrol etmek isteyebileceğiniz şeylerin ve neredeyse kesinlikle kontrol edilmesini istemediğiniz şeylerin bir karışımıdır.

Her zaman istediğim, tamamen öngörülebilir kararların sorumluluğunu üstlenecek bir katman (DAL, ORM veya mikro-ORM olarak adlandırıyorum, sakıncası yok) (parantezlerin nereye gittiğinde SQL anahtar kelimelerinin nasıl heceleneceği sütun takma adları, iki kayan nokta ve bir int tutan bir sınıf için hangi sütunları oluşturmak için icat ederken), beni SQL'in üst düzey yönlerinden sorumlu tutarken, yani JOIN'leri, sunucu tarafı hesaplamaları nasıl düzenleyeceğimizi, DISTINCT'ler, GROUP BYs, skaler alt sorgular vb.

Bu yüzden bunu yapan bir şey yazdım: http://quince-lib.com/

Bu C ++ için: Kullandığınız dilin bu olup olmadığını bilmiyorum, ama aynı şey bu bir "orta yol" neye benzeyebileceğini görmek ilginç olabilir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.