Nesne-ilişkisel haritalama - Object–relational mapping

Nesne-ilişkisel haritalama (ORM, O / RM, ve O / R eşleme aracı) içinde bilgisayar Bilimi bir programlama uyumsuzlar arasında veri dönüştürme tekniği tip sistemler kullanma nesne odaklı Programlama dilleri. Bu, aslında bir "sanal nesne veritabanı "Bu, programlama dili içinden kullanılabilir. Nesne-ilişkisel haritalama gerçekleştiren hem ücretsiz hem de ticari paketler mevcuttur, ancak bazı programcılar kendi ORM araçlarını oluşturmayı tercih ederler.

İçinde nesne yönelimli programlama, veri yönetimi görevler etki eder nesneler neredeyse her zamanskaler değerler. Örneğin, sıfır veya daha fazla telefon numarası ve sıfır veya daha fazla adresle birlikte tek bir kişiyi temsil eden bir adres defteri girişini düşünün. Bu, "Kişi" tarafından nesne yönelimli bir uygulamada modellenebilir. nesne " bir ile öznitelik / alan girişin içerdiği her veri öğesini tutmak için: kişinin adı, telefon numaralarının bir listesi ve bir adres listesi. Telefon numaraları listesinin kendisi "Telefon Numarası nesneleri" vb. İçerir. Bu tür her adres defteri girdisi, programlama dili tarafından tek bir nesne olarak ele alınır (örneğin, nesneye bir işaretçi içeren tek bir değişkenle başvurulabilir). Çeşitli yöntemler tercih edilen telefon numarasını, ev adresini vb. döndürme yöntemleri gibi nesne ile ilişkilendirilebilir.

Buna karşılık, birçok popüler veritabanı ürünü SQL Veritabanı Yönetim Sistemleri (DBMS) nesne yönelimli değildir ve yalnızca depolayabilir ve değiştirebilir skaler içinde düzenlenen tamsayılar ve dizeler gibi değerler tablolar. Programcı, nesne değerlerini veritabanında saklamak için daha basit değer gruplarına dönüştürmeli (ve geri alındığında bunları geri dönüştürmelidir) veya program içinde yalnızca basit skaler değerleri kullanmalıdır. Nesne-ilişkisel haritalama ilk yaklaşımı uygular.[1]

Sorunun özü, nesnelerin mantıksal temsilini, gerektiğinde nesneler olarak yeniden yüklenebilmeleri için nesnelerin özelliklerini ve ilişkilerini korurken veritabanında saklanabilen atomize bir forma dönüştürmeyi içerir. Bu depolama ve geri alma işlevselliği uygulanırsa, nesnelerin kalici.[1]

Genel Bakış

Depolama sürücülerinin uygulamaya özgü ayrıntıları, genellikle kullanımdaki programlama dilinde bir API'ye sarılır ve yöntemleri, daha basit ve çevreleyen kodun paradigmalarına daha uygun bir şekilde depolama ortamıyla etkileşime girmeye maruz bırakır.

Aşağıdaki basit bir örnektir. C # kod, yazılmış bir sorguyu yürütmek için SQL bir veritabanı motoru kullanarak.

var sql = "İd = 10 NEREDE kişilerden kimlik, ad, soyad, telefon, doğum_tarihi, cinsiyet, yaş SEÇİN";var sonuç = bağlam.Kişiler.FromSqlRaw(sql).Listeye();var isim = sonuç[0]["İsim"];

Bunun tersine, aşağıdakiler, dilin özelliklerinden doğal olarak faydalanan kodun yazılmasına izin veren bir ORM-iş API'sini kullanır.

var kişi = depo.GetPerson(10);var İsim = kişi.GetFirstName();

Yukarıdaki durum, depolama havuzunu ve bu nesnenin yöntemlerini temsil eden bir nesneyi kullanır. Diğer çerçeveler, aşağıda gösterildiği gibi statik yöntemler olarak kod sağlayabilir ve yine de diğer yöntemler, nesneye yönelik bir sistemi hiç uygulamayabilir. Çoğunlukla paradigma seçimi, ORM'yi çevreleyen dilin tasarım ilkelerine en iyi şekilde uyacak şekilde yapılır.

var kişi = Kişi.Almak(10);

Genellikle çerçeve, bazı filtreleme ve sorgulama işlevlerini açığa çıkararak, depolama tabanının alt kümelerine erişilmesine ve değiştirilmesine izin verir. Aşağıdaki kod, veritabanında bulunan ve ID değeri '10' olan kişileri sorgular.

var kişi = Kişi.Almak(Kişi.Özellikleri.İD == 10);

Geleneksel veri erişim teknikleriyle karşılaştırma

Nesne yönelimli bir dil ile ilişkisel bir veritabanı arasındaki geleneksel değişim teknikleriyle karşılaştırıldığında, ORM genellikle yazılması gereken kod miktarını azaltır.[2]

ORM araçlarının dezavantajları genellikle yüksek seviyeden kaynaklanır. soyutlama uygulama kodunda gerçekte neler olduğunu belirsizleştirmek. Ayrıca, kötü tasarlanmış veritabanları üretmede önemli bir faktör olarak ORM yazılımına aşırı bağımlılık gösterildi.[3]

Nesneye yönelik veritabanları

Başka bir yaklaşım, bir nesne yönelimli veritabanı yönetim sistemi (OODBMS) veya belge odaklı veritabanları yerli gibi XML veritabanları veri modellemede daha fazla esneklik sağlayan. OODBMS'ler, özellikle nesne yönelimli değerlerle çalışmak için tasarlanmış veritabanlarıdır. Bir OODBMS kullanmak, veriler orijinal nesne sunumunda saklandığından ve ilişkiler gerektirmek yerine doğrudan temsil edildiğinden, verileri SQL formuna ve SQL formuna dönüştürme ihtiyacını ortadan kaldırır. masalara katıl /operasyonlar. ORM eşdeğeri belge odaklı veritabanları nesne-belge eşleyicileri (ODM'ler) olarak adlandırılır.

Belge odaklı veritabanları ayrıca kullanıcının nesneleri tablo satırlarına "parçalamak" zorunda kalmasını önler. Bu sistemlerin çoğu aynı zamanda XQuery veri kümelerini almak için sorgu dili.

Nesneye yönelik veritabanları karmaşık, niş uygulamalarda kullanılma eğilimindedir. Bir OODBMS kullanımına karşı argümanlardan biri, geçici, uygulamadan bağımsız sorguları yürütemeyebileceğidir.[kaynak belirtilmeli ] Bu nedenle, çoğu programcı, çoğu nesne yönelimli veritabanı SQL sorgularını sınırlı ölçüde işleyebilse de, bir nesne-SQL eşleme sistemi ile kendilerini daha çok evde bulurlar. Diğer OODBMS, iyi bilinen sorgu modellerini korurken, anlık sorgulara olan ihtiyacı karşılamanın bir yolu olarak SQL veritabanlarına çoğaltma sağlar.[kaynak belirtilmeli ]

Zorluklar

Bir nesne sisteminin ilişkisel bir veri tabanıyla nasıl eşleştirileceğini düşünürken çeşitli zorluklar ortaya çıkar. Bu zorluklar, nesne-ilişkisel empedans uyumsuzluğu.[4]

ORM'yi uygulamaya bir alternatif, her büyük veritabanı ile sağlanan yerel prosedür dillerinin kullanılmasıdır. Bunlar, istemciden SQL ifadeleri kullanılarak çağrılabilir. Veri Erişim Nesnesi (DAO) tasarım modeli, bu ifadeleri soyutlamak ve uygulamanın geri kalanına hafif bir nesne yönelimli arayüz sunmak için kullanılır.[5]

Ayrıca bakınız

Referanslar

  1. ^ a b "Nesne / İlişkisel Haritalama Nedir?". Hazırda Bekletmeye Genel Bakış. JBOSS Hazırda Bekletme. Alındı 19 Nisan 2011.
  2. ^ Douglas Barry, Torsten Stanienda, "Java Nesne Depolama Sorununu Çözme", Bilgisayar, cilt. 31, hayır. 11, s. 33-40, Kasım 1998, http://www2.computer.org/portal/web/csdl/doi/10.1109/2.730734 , Alıntı: http://www.service-architecture.com/object-relational-mapping/articles/transparent_persistence_vs_jdbc_call-level_interface.html. O / R kullanan kod satırları, çağrı düzeyi arabirimi için gerekli olanların yalnızca bir kısmıdır (1: 4). Bu alıştırma için, JDBC kullanan 1.923 kod satırına kıyasla ODMG Java Binding kullanılarak 496 satır koda ihtiyaç vardı.
  3. ^ Josh Berkus, "Veritabanınızı Yıkıyor", Bilgisayar, Ağustos 2009, http://it.toolbox.com/blogs/database-soup/wrecking-your-database-33298, Web yayını https://www.youtube.com/watch?v=uFLRc6y_O3s
  4. ^ Nesne-İlişkisel Haritalama Revisited - Veritabanı Teknolojisinin O / R Haritalama Stratejileri Üzerindeki Etkisine İlişkin Niceliksel Bir Çalışma. M Lorenz, JP Rudolph, G Hesse, M Uflacker, H Plattner. Hawaii Uluslararası Sistem Bilimleri Konferansı (HICSS), 4877-4886 (DOI: 10.24251 / hicss.2017.592)
  5. ^ Feuerstein, Steven; Bill Pribyl (Eylül 1997). "Oracle PL / SQL Programlama". 18.5 Kalıcı Nesnelerin Değiştirilmesi. Alındı 23 Ağustos 2011.CS1 Maint: konum (bağlantı)

Dış bağlantılar