Вопрос по orm – Что такое объектно-реляционная структура сопоставления? [Дубликат]

77

This question already has an answer here:

What is an ORM and where can I learn more about it? [closed] 8 answers

Как видно из названия; Что такое платформа ORM и для чего она нужна?

Ваш Ответ

8   ответов
0

Библиотеки объектно-реляционного сопоставления (ORM) обеспечивают это сопоставление таблиц базы данных с классами объектов домена.

2

ORM является:

Абстракция, как и любая абстракция, облегчает вам жизнь.

47

Из википедии:

Object-relational mapping (ORM, O/RM, and O/R mapping) in computer software is a programming technique for converting data between incompatible type systems in relational databases and object-oriented programming languages. This creates, in effect, a "virtual object database" that can be used from within the programming language. There are both free and commercial packages available that perform object-relational mapping, although some programmers opt to create their own ORM tools.

Это хорошо для абстрагирования хранилища данных (плоский файл / SQL / что угодно) для обеспечения интерфейса, который можно использовать в вашем коде. Например, (в rails) вместо создания SQL для поиска первого пользователя в таблице users, мы могли бы сделать это:

User.first

Который вернул бы нам экземпляр нашей пользовательской модели с атрибутами первого пользователя в таблице users.

9

Базы данных обычно работают по реляционной модели: у вас есть таблицы (упрощенно: как в электронной таблице) и взаимосвязи между ними - один-к-одному, один-ко-многим, многие-ко-многим и т. Д., Что означает, например, одну запись в таблица A имеет много связанных записей в таблице B. Вы можете извлечь данные из них в виде строк (набор значений, представляющих строки из таблицы / таблиц)Больше в википедии.

Современные языки программирования используют объектную модель. Объекты имеют методы, атрибуты (простые или сложные) и т. Д.

Программное обеспечение ORM осуществляет переход между этими моделями. Например, он помещает все связанные записи из таблицы B в атрибут объекта A. Этот вид программного обеспечения облегчает использование реляционных баз данных (наиболее популярный вид) с объектными языками программирования.

241

Простой ответ заключается в том, что вы оборачиваете свои таблицы или хранимые процедуры в классы на своем языке программирования, чтобы вместо написания операторов SQL для взаимодействия с вашей базой данных вы использовали методы и свойства объектов.

Другими словами, вместо чего-то вроде этого:

String sql = "SELECT ... FROM persons WHERE id = 10"
DbCommand cmd = new DbCommand(connection, sql);
Result res = cmd.Execute();
String name = res[0]["FIRST_NAME"];

вы делаете что-то вроде этого:

Person p = repository.GetPerson(10);
String name = p.FirstName;

или подобный код (много вариантов здесь.) Некоторые фреймворки также помещают большую часть кода в качестве статических методов в сами классы, что означает, что вы могли бы сделать что-то вроде этого:

Person p = Person.Get(10);

Некоторые также реализуют сложные системы запросов, так что вы можете сделать это:

Person p = Person.Get(Person.Properties.Id == 10);

Фреймворк делает этот код возможным.

Теперь выгода. Прежде всего, вы скрываете SQL от вашего логического кода. Преимущество этого состоит в том, что вы можете легче поддерживать больше баз данных. Например, MS SQL Server и Oracle имеют разные имена для типичных функций и разные способы выполнения вычислений с датами, поэтому запрос "Получить все редактируемые люди за последние 24 часа" может повлечь за собой различный синтаксис SQL только для этих двух механизмов базы данных. Эту разницу можно убрать из вашего логического кода.

Кроме того, вы можете сосредоточиться на написании логики, вместо того, чтобы получить правильный SQL. Код, как правило, также будет более читабельным, так как он не содержит всех «сантехнических операций». необходимо поговорить с базой данных.

Люди в интернете ищут такие прекрасные описания, а не используют технический жаргон.
+1. Это "другими словами" часть, в которой отсутствует википедия.
Я желаю, когда Википедия начнет давать такие простые и значимые определения сложных терминов .. +1 для простоты.
Вы знаете, что вы, ребята, можете редактировать Википедию вместо / а также критиковать ее.
+1 за чистый, простой, приятный ответ. Ваши ответы лучше, чем принятый ответ.
0

Из Википедии: http://en.wikipedia.org/wiki/Object-relational_mapping

Объектно-реляционное отображение (ORM, O / RM и O / R mapping) в компьютерном программном обеспечении - это метод программирования для преобразования данных между системами несовместимого типа в реляционных базах данных и объектно-ориентированных языках программирования. В результате создается «база данных виртуальных объектов». это можно использовать из языка программирования. Доступны как бесплатные, так и коммерческие пакеты, которые выполняют объектно-реляционное отображение, хотя некоторые программисты предпочитают создавать свои собственные инструменты ORM.

Плюсы и минусы ORM часто уменьшает объем кода, который необходимо написать, делая программное обеспечение более устойчивым (чем меньше строк кода в программе, тем меньше ошибок содержится в них). [1].

Есть затраты, а также преимущества для использования O / R картирования. Например, некоторые инструменты отображения O / R не работают хорошо во время массового удаления данных. Хранимые процедуры могут иметь лучшую производительность, но не переносимы.

6

Всякий раз, когда вы используете ORM (Object Relational Mapper), вы найдете DBAL (Уровень абстракции базы данных) рядом. Поэтому необходимо знать, что это такое, чтобы получить хорошее представление о том, что вы используете, и какие преимущества вы получите.

DBAL (Database Abstraction Layer)

Он действует как слой между вашим кодом и базой данных. Независимо от вашей базы данных, написанный код будет хорошо работать с незначительными изменениями.

Предположим, что для текущего проекта, когда вы используете MySQL, когда он полностью сформировался и получит огромный трафик, ваша команда по какой-то причине планирует переключить базу данных на Oracle, тогда код, написанный на MySQL, должен быть переписан в запросы на основе Oracle. И переписывание запросов для всего проекта - утомительная задача.

Вместо этого, если вы используете какие-либо библиотеки DBAL, вы можете переключить конфигурацию базы данных и убедиться, что ваш проект будет запущен в течение дня (возможно, с некоторыми незначительными изменениями).

ORM (Object Relational Mapper)

Объектно-реляционное сопоставление (ORM) - это методика (шаблон проектирования) для доступа к реляционной базе данных из объектно-ориентированного языка.

Если вы использовали какие-либо фреймворки, такие как Symfony (если вы пришли из PHP фона) / Hibernate (Java), то вы знакомы с ними. Это ничего, кромеEntities.

Чтобы получить доступ к базе данных в объектно-ориентированном контексте, и необходим интерфейс, переводящий объектную логику, этот интерфейс называется ORM. Он состоит из объекта, который предоставляет доступ к данным и сохраняет бизнес-правила при себе.

Например.

class User{
    private $email;

    private $password;

    public function setEmail($email){
        $this->email = $email;
        return $this;
    }

    public function getEmail(){
        return $this->email;
    }


    public function setPassword($password){
        $this->password = $password;
        return $this;
    }

    public function getPassword(){
        return $this->password;
    }
}

/* To save User details you would do something like this */
$userObj = new User();
$userObj->setEmail('sanitizedEmail');
$userObj->setPassword('sanitizedPassword');
$userObj->save();

/* To fetch user details you would do something like this */
$userObj = new User();
$userDetails = $userObj->find($id);

Например.доктрина, приводить в движение, Красный боб

0

Это позволяет вам делать такие вещи (это код Doctrine):

$activeUsers = Doctrine::getTable('User')->createQuery('u')->addWhere('u.active = false');
foreach($activeUsers as $user)
{
   $user->active = true;
   $user->save();
}

Похожие вопросы