program story

객체-관계형 매핑 프레임 워크 란 무엇입니까?

inputbox 2020. 10. 6. 08:10
반응형

객체-관계형 매핑 프레임 워크 란 무엇입니까? [복제]


이 질문에 이미 답변이 있습니다.

제목에서 알 수 있듯이; ORM 프레임 워크 란 무엇이며 어떤 용도로 유용합니까?


wikipedia에서 :

컴퓨터 소프트웨어의 객체 관계형 매핑 (ORM, O / RM 및 O / R 매핑)은 관계형 데이터베이스와 객체 지향 프로그래밍 언어의 호환되지 않는 유형 시스템간에 데이터를 변환하는 프로그래밍 기술입니다. 이는 사실상 프로그래밍 언어 내에서 사용할 수있는 "가상 개체 데이터베이스"를 생성합니다. 일부 프로그래머는 자신의 ORM 도구를 만드는 것을 선택하지만 개체 관계형 매핑을 수행하는 무료 및 상용 패키지를 모두 사용할 수 있습니다.

코드에서 사용할 수있는 인터페이스를 제공하기 위해 데이터 저장소 (플랫 파일 / SQL / 무엇이든)를 추상화하는 데 좋습니다. 예를 들어, 사용자 테이블에서 첫 번째 사용자를 찾기 위해 SQL을 구성하는 대신 (레일에서) 다음과 같이 할 수 있습니다.

User.first

사용자 테이블에서 첫 번째 사용자의 속성과 함께 사용자 모델의 인스턴스를 반환합니다.


간단한 대답은 프로그래밍 언어의 클래스에서 테이블 또는 저장 프로 시저를 래핑하여 데이터베이스와 상호 작용하는 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을 올바르게 작성하는 대신 논리 작성에 집중할 수 있습니다. 이 코드는 데이터베이스와 통신하는 데 필요한 모든 "배관"이 포함되어 있지 않기 때문에 일반적으로 더 읽기 쉽습니다.


데이터베이스는 일반적으로 관계형 모델에서 작동합니다. 테이블 (단순화 : 스프레드 시트처럼)과 테이블 간의 관계-일대일, 일대 다, 다 대다 등, 예를 들어 하나의 레코드가 테이블 A에는 테이블 B에 많은 관련 레코드가 있습니다. 데이터를 행으로 검색 할 수 있습니다 (테이블 / 테이블의 행을 나타내는 값 모음) More in wikipedia .

최신 프로그래밍 언어는 개체 모델을 사용합니다. 객체에는 메서드, 속성 (단순 또는 복합) 등이 있습니다.

ORM 소프트웨어는 이러한 모델간에 전환을 수행합니다. 예를 들어, 테이블 B의 모든 관련 레코드를 객체 A의 속성에 넣습니다. 이러한 종류의 소프트웨어를 사용하면 객체 프로그래밍 언어로 관계형 데이터베이스 (가장 널리 사용되는 종류)를 더 쉽게 사용할 수 있습니다.


ORM (Object Relational Mapper)을 사용할 때마다 DBAL (Database Abstraction Layer)이 나란히 있습니다. 따라서 무엇을 사용하고 있으며 어떤 이점을 얻을 수 있는지에 대한 좋은 통찰력을 얻으려면 이것이 무엇인지 아는 것이 필요합니다.

DBAL (데이터베이스 추상화 계층)

코드와 데이터베이스 사이의 레이어 역할을합니다. 데이터베이스에 관계없이 작성된 코드는 약간의 조정으로 잘 작동합니다.

현재 프로젝트의 경우 MySQL이 완전히 성숙되고 막대한 트래픽이 발생하면 어떤 이유로 든 데이터베이스를 Oracle로 전환 할 계획 인 경우 MySQL에서 작성한 코드를 Oracle 기반 쿼리로 다시 작성해야한다고 가정합니다. 그리고 전체 프로젝트에 대한 쿼리를 다시 작성하는 것은 지루한 작업입니다.

대신 DBAL 라이브러리를 사용하는 경우 데이터베이스 구성을 전환하고 프로젝트가 하루 안에 실행되는지 확인할 수 있습니다 (약간의 조정이있을 수 있음).

ORM (Object Relational Mapper)

ORM (Object Relational Mapping)은 객체 지향 언어에서 관계형 데이터베이스에 액세스하는 기술 (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);

Eg. Doctrine, Propel, RedBean


ORM is:

An abstraction and like any abstraction it makes life easier for you.


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

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.

Pros and cons ORM often reduces the amount of code needed to be written, making the software more robust (the fewer the lines of code in a program, the fewer the errors contained within them).[1].

There are costs as well as benefits for using O/R mapping. For instance, some O/R mapping tools do not perform well during bulk deletions of data. Stored procedures may have better performance but are not portable.


It allows you to do things like this (this is Doctrine code):

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

Object-relational mapping (ORM) libraries provide this mapping of database tables to domain object classes.

참고URL : https://stackoverflow.com/questions/1152299/what-is-an-object-relational-mapping-framework

반응형