2009-07-20 8 views

Respuesta

45

From wikipedia:

mapeo de objetos relacional (ORM, O/RM, y O/mapeo R) en el software de ordenador es una técnica de programación para conversión de datos entre sistemas de tipo incompatibles en bases de datos relacionales y programación orientada a objetos idiomas. Esto crea, en efecto, una "base de datos de objeto virtual" que puede ser utilizada desde el lenguaje de programación . Hay paquetes comerciales gratuitos y disponibles que realizan mapeo relacional de objetos, aunque algunos programadores optan por crear sus propias herramientas ORM.

Es bueno para abstraer el almacén de datos (archivo plano/SQL/lo que sea) para proporcionar una interfaz que pueda usarse en su código. Por ejemplo, (en los carriles) en lugar de construir SQL para encontrar el primer usuario en una tabla de usuarios, podríamos hacer esto:

User.first 

que nos devuelve una instancia de nuestro modelo de usuario, con los atributos de la primera usuario en la tabla de usuarios.

0

De Wikipedia: http://en.wikipedia.org/wiki/Object-relational_mapping

mapeo de objetos relacional (ORM, O/RM, y O/mapeo R) en el software de ordenador es una técnica de programación para la conversión de datos entre sistemas de tipo incompatibles en bases de datos relacionales y a objetos lenguajes de programación orientados. Esto crea, en efecto, una "base de datos de objetos virtuales" que se puede usar desde el lenguaje de programación. Existen paquetes gratuitos y comerciales disponibles que realizan mapeo relacional de objetos, aunque algunos programadores optan por crear sus propias herramientas ORM.

Pros y contras ORM a menudo reduce la cantidad de código necesario para escribir, lo que hace que el software sea más robusto (menos líneas de código en un programa, menos errores contienen). [1].

La asignación de O/R tiene sus costos y beneficios. Por ejemplo, algunas herramientas de mapeo O/R no funcionan bien durante las eliminaciones masivas de datos. Los procedimientos almacenados pueden tener un mejor rendimiento pero no son portátiles.

213

Una respuesta simple es que envuelve sus tablas o procedimientos almacenados en clases en su lenguaje de programación, de modo que en lugar de escribir sentencias SQL para interactuar con su base de datos, utilice métodos y propiedades de objetos.

En otras palabras, en lugar de algo como esto:

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

que hacer algo como esto:

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

o similares código (un montón de variaciones aquí.) Algunos marcos también poner una gran cantidad de código en los métodos estáticos en las clases mismas, lo que significa que podría hacer algo como esto en su lugar:

Person p = Person.Get(10); 

Algunos también implementar sistemas de consulta complejas, por lo que podría hacer esto:

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

El marco es lo que hace posible este código.

Ahora, beneficios. En primer lugar, oculta el SQL de su código lógico. Esto tiene el beneficio de permitirle soportar más fácilmente más motores de base de datos. Por ejemplo, MS SQL Server y Oracle tienen diferentes nombres en funciones típicas y diferentes formas de hacer cálculos con fechas, por lo que una consulta para "obtenerme a todas las personas editadas las últimas 24 horas" podría implicar una sintaxis SQL diferente solo para esos dos motores de base de datos . Esta diferencia puede separarse de su código lógico.

Además, puede enfocarse en escribir la lógica, en lugar de tener todo el SQL correcto. El código también será más legible, ya que no contiene todas las "tuberías" necesarias para hablar con la base de datos.

+33

Deseo, Wikipedia Cuando se empiece a dar tan simple y definiciones significativas de términos complejos ... +1 por simplicidad. – Faizan

+0

+1 para una respuesta limpia, simple y agradable. Tu es mejor que la respuesta aceptada. –

+0

Las personas en Internet buscan descripciones tan bonitas en lugar de poner su cabeza en la jerga técnica. – bioinformatician

0

Se le permite hacer cosas como esta (esto es código Doctrina):

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

ORM es:

Una abstracción y como cualquier abstracción que hace la vida más fácil para usted.

7

Las bases de datos generalmente trabajan en el modelo relacional: tiene tablas (simplificando: como una hoja de cálculo), y las relaciones entre ellas - uno a uno, uno a muchos, muchos a muchos, etc., significando por ejemplo ese registro en la tabla A tiene muchos registros relacionados en la tabla B. Puede recuperar datos de ellos como filas (colección de valores que representan filas de la tabla/tablas) More in wikipedia.

Los lenguajes de programación modernos usan el modelo de objetos. Los objetos tienen métodos, atributos (simples o complejos), etc.

El software ORM hace una transición entre esos modelos. Por ejemplo, coloca todos los registros relacionados de la tabla B en un atributo del objeto A. Este tipo de software facilita el uso de bases de datos relacionales (el tipo más popular) con lenguajes de programación de objetos.

0

Las bibliotecas de mapeo relacional de objetos (ORM) proporcionan esta asignación de las tablas de la base de datos a clases de objetos de dominio.

3

Siempre que vaya con ORM (Object Relational Mapper) encontrará DBAL (capa de abstracción de base de datos) uno al lado del otro. Por lo tanto, es necesario saber cuáles son, a fin de obtener una buena idea de lo que está utilizando y cuáles son las ventajas que obtendrá.

DBAL (Base de datos de capa de abstracción)

Actúa como una capa entre el código y la base de datos. Independientemente de cuál sea su base de datos, el código escrito funcionará bien con ajustes menores.

Suponga que para el proyecto actual su uso de MySQL una vez que ha madurado completamente y recibe mucho tráfico, su equipo planea cambiar la base de datos a Oracle, entonces el código que ha escrito en MySQL debe reescribirse a consultas basadas en Oracle. Y volver a escribir las consultas para todo el proyecto es una tarea tediosa.

En su lugar, si utiliza cualquier biblioteca DBAL, puede cambiar la configuración de la base de datos y asegurarse de que su proyecto estará en funcionamiento dentro de un día (puede ser con algunos ajustes menores).

ORM (Object Relational Mapper)

Object Relational Mapping (ORM) es una técnica (patrón de diseño) de acceder a una base de datos relacional de un lenguaje orientado a objetos.

Si ha utilizado algún tipo de frameworks como Symfony (si proviene de PHP)/Hibernate (Java), entonces familiarícese con estos. Es nada más que Entidades.

Para acceder a la base de datos en contexto orientado a objetos y la interfaz es necesaria para traducir la lógica del objeto, esta interfaz se denomina ORM. Es la composición del objeto que da acceso a los datos y mantiene las reglas de negocio consigo mismos.

Por ejemplo.

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

Cuestiones relacionadas