Подтвердить что ты не робот

Что такое структура объектно-реляционного сопоставления?

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

4b9b3361

Ответ 1

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

Объектно-реляционное сопоставление (ORM, O/RM, и O/R-отображение) в программном обеспечении является методом программирования для преобразование данных между несовместимыми типа в реляционных базах данных и объектно-ориентированное программирование языки. Это создает, по сути, "база данных виртуальных объектов", которая может быть используется в рамках программирования язык. Есть как свободные, так и доступные коммерческие пакеты, которые выполнять объектно-реляционное сопоставление, хотя некоторые программисты предпочитают создайте свои собственные инструменты ORM.

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

User.first

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

Ответ 2

Простым ответом является то, что вы переносите свои таблицы или хранимые процедуры в классы на вашем языке программирования, чтобы вместо того, чтобы писать операторы 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. Код обычно будет более читабельным, так как он не содержит всю "сантехнику", необходимую для связи с базой данных.

Ответ 3

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

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

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

Ответ 4

ORM:

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

Ответ 5

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

DBAL (уровень абстракции базы данных)

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

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

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

ORM (объект Relational Mapper)

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

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

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

Eg.

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);

Eg. Doctrine, Propel, RedBean

Ответ 6

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

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

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

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

Ответ 7

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

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

Ответ 8

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