2009-07-20 3 views

ответ

45

From wikipedia:

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

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

User.first 

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

0

Материал из Википедии: http://en.wikipedia.org/wiki/Object-relational_mapping

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

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

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

213

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

+33

Я желаю, Когда википедия начнет давать такой простой и содержательные определения сложных термов .. +1 для простоты. – Faizan

+0

+1 для чистого, простого, приятного ответа. Ваш лучше, чем принятый ответ. –

+0

Люди в Интернете ищут такие красивые описания, вместо того, чтобы положить голову на технический жаргон. – bioinformatician

0

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

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

ORM является:

абстракции и как любая абстракция это делает жизнь проще для вас.

7

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

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

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

0

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

3

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

DBAL (Database Abstraction Layer)

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

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

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

ОРМ (Object Relational Mapper)

Объект реляционное отображение (ОРМ) представляет собой метод (Design Pattern) доступа к реляционной базе данных из объектно-ориентированного языка.

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

Для доступа к базе данных в объектно-ориентированном контексте и для перевода интерфейса логика объекта необходима, этот интерфейс называется 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); 

Например. Doctrine, Propel, RedBean

Смежные вопросы