Mapowanie obiektowo-relacyjne - Object–relational mapping

Mapowanie obiektowo-relacyjne ( ORM , O/RM i narzędzie do mapowania O/R ) w informatyce to technika programowania służąca do konwertowania danych między niezgodnymi systemami typów przy użyciu języków programowania obiektowego . Tworzy to w efekcie „wirtualną bazę danych obiektów ”, której można używać z poziomu języka programowania. Dostępne są zarówno darmowe, jak i komercyjne pakiety, które wykonują mapowanie obiektowo-relacyjne, chociaż niektórzy programiści decydują się na konstruowanie własnych narzędzi ORM.

W programowania obiektowego , zarządzania danymi zadania działają na obiektach , które są prawie zawsze nie- skalarne wartości. Rozważmy na przykład wpis książki adresowej, który reprezentuje pojedynczą osobę wraz z zerem lub większą liczbą numerów telefonów i zerem lub większą liczbą adresów. Może to być modelowane w implementacji obiektowej przez „ obiekt osoby ” z atrybutem/polem do przechowywania każdego elementu danych, który zawiera wpis: imię i nazwisko osoby, lista numerów telefonów i lista adresów. Sama lista numerów telefonów zawierałaby „obiekty PhoneNumber” i tak dalej. Każdy taki wpis w książce adresowej jest traktowany przez język programowania jako pojedynczy obiekt (może się do niego odwoływać np. pojedyncza zmienna zawierająca wskaźnik do obiektu). Z obiektem można powiązać różne metody , takie jak metody zwracania preferowanego numeru telefonu, adresu domowego i tak dalej.

W przeciwieństwie do tego, wiele popularnych produktów bazodanowych, takich jak systemy zarządzania bazami danych SQL (DBMS), nie jest zorientowanych obiektowo i może jedynie przechowywać i manipulować wartościami skalarnymi , takimi jak liczby całkowite i łańcuchy zorganizowane w tabelach . Programista musi albo przekonwertować wartości obiektów na grupy prostszych wartości do przechowywania w bazie danych (i przekonwertować je z powrotem po pobraniu), albo użyć tylko prostych wartości skalarnych w programie. Mapowanie obiektowo-relacyjne implementuje pierwsze podejście.

Sedno problemu polega na przetłumaczeniu logicznej reprezentacji obiektów na atomową formę, którą można przechowywać w bazie danych, zachowując jednocześnie właściwości obiektów i ich relacje, aby w razie potrzeby można je było ponownie wczytać jako obiekty. Jeśli ta funkcja przechowywania i pobierania jest zaimplementowana, obiekty są określane jako trwałe .

Przegląd

Specyficzne dla implementacji szczegóły sterowników pamięci masowej są zazwyczaj opakowane w interfejs API w używanym języku programowania, ujawniając metody interakcji z nośnikiem pamięci w sposób prostszy i bardziej zgodny z paradygmatami otaczającego kodu.

Poniżej znajduje się prosty przykład napisany w kodzie C# , aby wykonać zapytanie napisane w języku SQL przy użyciu aparatu bazy danych.

var sql = "SELECT id, first_name, last_name, phone, birth_date, sex, age FROM persons WHERE id = 10";
var result = context.Persons.FromSqlRaw(sql).ToList();
var name = result[0]["first_name"];

W przeciwieństwie do tego, poniższe korzysta z interfejsu API zadań ORM, umożliwiającego pisanie kodu, który w naturalny sposób wykorzystuje cechy języka.

var person = repository.GetPerson(10);
var firstName = person.GetFirstName();

Powyższy przypadek wykorzystuje obiekt reprezentujący repozytorium i metody tego obiektu. Inne frameworki mogą dostarczać kod jako metody statyczne, jak poniżej, a jednak inne metody mogą w ogóle nie implementować systemu obiektowego. Często wybór paradygmatu jest dokonywany w celu najlepszego dopasowania ORM do zasad projektowania języka otaczającego.

var person = Person.Get(10);

Zazwyczaj platforma udostępnia pewne funkcje filtrowania i zapytań, umożliwiając dostęp i modyfikację podzbiorów bazy danych. Poniższy kod pyta o osoby w bazie danych, których identyfikator ma wartość '10'.

var person = Person.Get(Person.Properties.Id == 10);

Porównanie z tradycyjnymi technikami dostępu do danych

W porównaniu z tradycyjnymi technikami wymiany między językiem obiektowym a relacyjną bazą danych, ORM często zmniejsza ilość kodu, który trzeba napisać.

Wady narzędzi ORM generalnie wynikają z wysokiego poziomu abstrakcji zasłaniającego to, co faktycznie dzieje się w kodzie implementacyjnym. Ponadto, jako główny czynnik w tworzeniu źle zaprojektowanych baz danych, wymieniono duże poleganie na oprogramowaniu ORM.

Bazy danych obiektowych

Innym podejściem jest wykorzystanie obiektowego systemu zarządzania bazami danych (OODBMS) lub baz danych zorientowanych na dokumenty, takich jak natywne bazy danych XML, które zapewniają większą elastyczność w modelowaniu danych. OODBMS to bazy danych zaprojektowane specjalnie do pracy z wartościami obiektowymi. Korzystanie z OODBMS eliminuje potrzebę konwertowania danych do i z jego postaci SQL, ponieważ dane są przechowywane w oryginalnej reprezentacji obiektu, a relacje są bezpośrednio reprezentowane, a nie wymagają łączenia tabel /operacji. Odpowiedniki ORM dla baz danych zorientowanych na dokumenty są nazywane maperami dokumentów obiektowych (ODM).

Bazy danych zorientowane na dokumenty zapobiegają również konieczności „rozdrabniania” obiektów w wierszach tabeli. Wiele z tych systemów obsługuje również język zapytań XQuery do pobierania zestawów danych.

Bazy danych zorientowane obiektowo są zwykle używane w złożonych, niszowych aplikacjach. Jednym z argumentów przeciwko używaniu OODBMS jest to, że może nie być w stanie wykonać zapytań ad hoc, niezależnych od aplikacji. Z tego powodu wielu programistów czuje się lepiej z systemem mapowania obiektowego SQL, mimo że większość baz danych zorientowanych obiektowo jest w stanie przetwarzać zapytania SQL w ograniczonym zakresie. Inne OODBMS zapewniają replikację do baz danych SQL, jako sposób na zaspokojenie zapotrzebowania na zapytania ad hoc, przy jednoczesnym zachowaniu dobrze znanych wzorców zapytań.

Wyzwania

Rozważając dopasowanie systemu obiektowego do relacyjnej bazy danych, pojawia się wiele trudności. Trudności te są określane jako niedopasowanie impedancji obiektowo-relacyjnej .

Alternatywą dla implementacji ORM jest użycie natywnych języków proceduralnych dostarczanych z każdą większą bazą danych. Można je wywołać z klienta za pomocą instrukcji SQL. Data Access Object (DAO) wzór konstrukcja służy do abstrakcyjny te oświadczenia i oferują lekki interfejs obiektowego do reszty aplikacji.

Zobacz też

Bibliografia

Zewnętrzne linki