오브젝트-관계매핑

Object–relational mapping

컴퓨터 과학에서 객체-관계 매핑(ORM, O/RMO/R 매핑 도구)은 객체 지향 프로그래밍 언어를 사용하여 유형 시스템 간에 데이터를 변환하는 프로그래밍 기술입니다.이를 통해 사실상 프로그래밍 언어 내에서 사용할 수 있는 "가상 객체 데이터베이스"가 생성됩니다.객체-관계 매핑을 수행하는 무료 패키지와 상용 패키지가 모두 있지만 일부 프로그래머는 자체 ORM 도구를 구축하기로 선택합니다.

객체 지향 프로그래밍에서 데이터 관리 태스크는 거의 항상 비스칼라 값인 객체에 대해 작동합니다.예를 들어, 0 이상의 전화번호 및 0 이상의 주소와 함께 한 명의 사용자를 나타내는 주소록 엔트리를 고려합니다.이것은 오브젝트 지향 구현에서 엔트리가 구성되는 각 데이터 항목(사용자 이름, 전화번호 목록 및 주소 목록)을 유지하는 속성/필드와 함께 "개인 개체"에 의해 모델링될 수 있습니다.전화번호 목록 자체에는 "Phone Number 객체" 등이 포함됩니다.이러한 각 주소록 엔트리는 프로그래밍 언어에 의해 단일 개체로 취급됩니다(예를 들어 오브젝트에 대한 포인터를 포함하는 단일 변수에 의해 참조될 수 있습니다).오브젝트에는 우선 전화번호를 반환하는 방법, 홈주소 등 다양한 방법을 관련지을 수 있습니다.

반면 SQL Database Management System(DBMS; SQL 데이터베이스 관리 시스템)과 같은 일반적인 데이터베이스 제품은 객체 지향적이지 않으며 테이블 에 정리된 정수나 문자열 등의 스칼라 값만 저장 및 조작할 수 있습니다.프로그래머는 오브젝트 값을 데이터베이스 내의 스토리지를 위해 단순한 값의 그룹으로 변환하거나(검색 후 다시 변환), 프로그램 내에서 단순한 스칼라 값만 사용해야 합니다.객체-관계 매핑은 첫 번째 접근방식을 [1]구현합니다.

문제의 핵심은 개체의 논리적 표현을 데이터베이스에 저장할 수 있는 원자화된 형식으로 변환하는 동시에 개체의 속성과 관계를 보존하여 필요할 때 개체로 다시 로드할 수 있도록 하는 것입니다.이 저장 및 검색 기능이 구현되면 오브젝트는 [1]영속적이라고 한다.

개요

스토리지 드라이버의 구현별 세부 정보는 일반적으로 사용 중인 프로그래밍 언어로 API로 포장되어 있으며, 보다 단순하고 주변 코드의 패러다임에 부합하는 방식으로 스토리지 미디어와 상호 작용하는 방법을 노출합니다.

다음으로 데이터베이스 엔진을 사용하여 SQL로 작성된 쿼리를 실행하는 간단한 예를 나타냅니다.

변화하다 sql = "SELECT ID, first_name, last_name, phone, birth_date, sex, age From persons WHERE ID = 10"; 변화하다 결과 = 맥락.사람.FromSqlRaw(sql).대상 목록(); 변화하다 이름. = 결과[0]["first_name"]; 

반면, 다음은 ORM-job API를 사용하여 언어의 특징을 자연스럽게 활용하는 코드를 작성할 수 있도록 합니다.

변화하다 사람인 = 저장소.인물 취득(10); 변화하다 이름 = 사람인.Get First Name(이름 가져오기)(); 

위의 경우 스토리지 저장소를 나타내는 개체와 해당 개체의 메서드를 사용합니다.다른 프레임워크는 아래 예시와 같이 정적 메서드로 코드를 제공할 수 있지만 다른 메서드는 객체 지향 시스템을 전혀 구현하지 않을 수 있습니다.종종 패러다임의 선택은 ORM이 주변 언어의 설계 원리에 가장 적합하도록 이루어집니다.

변화하다 사람인 = 사람인.얻다(10); 

일반적으로 프레임워크는 스토리지 베이스의 서브셋에 액세스 및 수정하기 위한 몇 가지 필터링 및 쿼리 기능을 제공합니다.아래 코드는 ID 값이 '10'인 데이터베이스의 사용자를 쿼리합니다.

변화하다 사람인 = 사람인.얻다(사람인.특성..아이디 == 10); 

기존 데이터 액세스 기술과의 비교

객체 지향 언어와 관계형 데이터베이스 간의 기존 교환 기술에 비해 [2]ORM은 작성해야 하는 코드의 양을 줄이는 경우가 많습니다.

ORM 툴의 단점은 일반적으로 구현 코드에서 실제로 일어나고 있는 일을 가리는 고도의 추상화에 기인합니다.또, ORM 소프트웨어에의 의존도가 높은 것도,[3] 설계 불량 데이타베이스의 작성의 주된 요인으로서 지적되고 있습니다.

객체 지향 데이터베이스

또 다른 접근법은 객체 지향 데이터베이스 관리 시스템(OODBMS) 또는 네이티브 XML 데이터베이스와 같은 문서 지향 데이터베이스를 사용하여 데이터 모델링에 더 많은 유연성을 제공하는 것입니다.OODBMS는 객체 지향적인 값으로 작업하기 위해 특별히 설계된 데이터베이스입니다.OODBMS를 사용하면 데이터가 원래 객체 표현에 저장되고 조인 테이블/연산이 아닌 관계가 직접 표현되므로 SQL 형식으로 데이터를 변환할 필요가 없습니다.문서 지향 데이터베이스의 ORM과 동등한 것을 ODM(Object-Document Mapper)이라고 합니다.

또한 문서 지향 데이터베이스는 사용자가 오브젝트를 표 행으로 "분할" 필요가 없도록 합니다.이러한 시스템의 대부분은 데이터셋을 검색하기 위한 XQuery 쿼리 언어도 지원합니다.

객체 지향 데이터베이스는 복잡하고 틈새 애플리케이션에 사용되는 경향이 있습니다.OODBMS 사용에 반대하는 주장 중 하나는 OODBMS가 애드혹, 애플리케이션 독립적인 [citation needed]쿼리를 실행할 수 없을 수 있다는 것입니다.이러한 이유로 대부분의 객체 지향 데이터베이스가 SQL 쿼리를 제한된 범위 내에서 처리할 수 있음에도 불구하고 많은 프로그래머들은 객체-SQL 매핑 시스템을 사용하여 보다 편하게 사용할 수 있습니다.다른 OODBMS는 잘 알려진 쿼리 [citation needed]패턴을 유지하면서 애드혹 쿼리의 필요성을 해결하기 위한 수단으로 SQL 데이터베이스에 복제를 제공합니다.

과제들

객체 시스템을 관계형 데이터베이스와 일치시키는 방법을 고려할 때 다양한 어려움이 발생합니다.이러한 어려움을 객체-관계 임피던스 [4]불일치라고 합니다.

ORM을 구현하는 대안으로 모든 주요 데이터베이스에 제공되는 네이티브 절차 언어를 사용하는 것이 있습니다.이들은 SQL 문을 사용하여 클라이언트에서 호출할 수 있습니다.Data Access Object(DAO; 데이터 액세스 객체) 설계 패턴은 이러한 문장의 추상화를 위해 사용되며 애플리케이션의 [5]나머지 부분에 경량 객체 지향 인터페이스를 제공합니다.

「 」를 참조해 주세요.

레퍼런스

  1. ^ a b "What is Object/Relational Mapping?". Hibernate Overview. JBOSS Hibernate. Retrieved 27 January 2022.
  2. ^ 더글라스 베리, 토르스텐 스타니엔다, "자바 객체 스토리지 문제 해결", 컴퓨터, vol. 31, no. 11, 페이지 33-40, 1998년 11월, http://www2.computer.org/portal/web/csdl/doi/10.1109/2.730734, 발췌 http://www.service-architecture.com/object-relational-mapping/articles/transparent_persistence_vs_jdbc_call-level_interface.html.O/R을 사용하는 코드 행은 콜레벨 인터페이스(1:4)에 필요한 코드의 극히 일부입니다.이 연습에서는 JDBC를 사용한 1,923줄의 코드와 비교하여 ODMG Java Binding을 사용한 코드 496줄이 필요했습니다.
  3. ^ Josh Berkus, "데이터베이스 파괴", Computer, 2009년 8월, https://www.toolbox.com/tech/data-management/blogs/wrecking-your-database-080509/
  4. ^ 오브젝트-관계매핑 재검토 - 데이터베이스 테크놀로지가 O/R매핑 전략에 미치는 영향에 관한 정량적 연구. M 로렌츠, JP 루돌프, G 헤세, M Uflacker, H 플래트너 하와이 국제시스템과학회의(HICS), 4877-4886(DOI:10.24251/hics.2017.592)
  5. ^ Feuerstein, Steven; Bill Pribyl (September 1997). "Oracle PL/SQL Programming". 18.5 Modifying Persistent Objects. Retrieved 23 August 2011.{{cite web}}: CS1 유지보수: 위치(링크)

외부 링크