객체 식별자 (데이터베이스)
더 많은 작업
객체 식별자(Object Identifier, OID)는 객체지향 데이터 모델과 객체 관계형 데이터베이스에서 객체가 생성될 때 시스템이 붙여 주는 고유한 값으로, 객체의 속성 값과 상관없이 그 객체의 정체성(identity)을 나타내며 생성된 뒤에는 바뀌지 않는다.
관계 데이터 모델은 값 기반이다. 두 투플은 값이 같으면 구별할 수 없고, 행을 식별하려면 사용자가 정한 속성 값인 기본 키를 쓴다. 객체지향 데이터 모델은 객체 정체성(object identity)을 따른다. 객체는 값과 독립적으로 존재하므로, 두 객체는 같은 객체(identical)일 수도 있고 값만 같은(equal) 서로 다른 객체일 수도 있다. 이 덕분에 두 객체가 하나의 하위 객체를 공유할 수 있고(예: 두 부모가 같은 자녀 객체를 가리킴), 공유된 객체를 한 번 고치면 그것을 가리키는 모든 곳에 반영된다. 1989년 '객체지향 데이터베이스 시스템 선언'은 객체 정체성을 객체지향 DBMS 가 반드시 갖춰야 할 특징으로 꼽았다.[1] OID 는 이 정체성을 구현하는 수단이다.
엘마스리(Elmasri)와 나바테(Navathe)는 OID 가 갖춰야 할 성질을 다음과 같이 정리한다.[2]
- 유일성 - 데이터베이스 안의 독립 객체마다 고유한 OID 가 있다. 같은 OID 를 가진 두 객체는 있을 수 없다
- 시스템 생성 - 객체가 만들어질 때 시스템이 OID 를 만들어 붙인다. 사용자는 OID 값을 정하지도 보지도 않고, 시스템이 객체를 가리키고 참조를 관리하는 데 내부적으로 쓴다
- 불변성 - 한 객체의 OID 값은 바뀌지 않는다. 객체의 속성 값이 모두 바뀌어도 OID 는 그대로라 같은 객체로 남는다
- 한 번만 사용 - 객체가 데이터베이스에서 지워져도 그 OID 를 다른 객체에 다시 붙이지 않는다
- 물리 주소와 무관 - 저장 위치가 재구성으로 바뀔 수 있으므로 OID 를 물리 주소에 기대어 만들지 않는다
| 구분 | 객체 식별자(OID) | 기본 키 |
|---|---|---|
| 바탕 | 객체 정체성(값과 독립) | 값 기반(속성 값으로 식별) |
| 만드는 쪽 | 시스템이 자동 생성 | 설계자·사용자가 속성 가운데 고른다 |
| 사용자에게 | 보통 보이지 않는다 | 보이고 직접 다룬다 |
| 값 변경 | 바뀌지 않는다 | 속성 값이므로 갱신할 수 있다 |
| 재사용 | 지운 객체의 OID 도 다시 쓰지 않는다 | 행을 지운 뒤 같은 키 값으로 새 행을 넣을 수 있다 |
OID 를 "관계 모델의 기본 키와 본질적으로 같다"고 보면 틀린다. 기본 키는 사용자가 정하는 속성 값이라 바뀔 수 있고 값이 같으면 같은 것으로 보지만, OID 는 값과 무관한 정체성이다.[1] 값 기반 시스템에서도 명시적인 식별자 칼럼을 두어 정체성을 흉내 낼 수는 있지만, 그러면 유일성과 참조 무결성을 지키는 부담이 사용자에게 넘어간다.
Oracle 의 객체 테이블은 행 객체마다 시스템이 만든 16바이트짜리 고유 OID 를 숨은 칼럼에 두고, 이 칼럼에 자동으로 인덱스를 만든다. 다른 객체나 관계 테이블은 REF 형으로 이 OID 를 가리켜 행 객체를 참조한다. Oracle 은 OID 의 내부 구조를 공개하지 않는다. 다만 선택 사항으로 OBJECT IDENTIFIER IS PRIMARY KEY 를 지정해 기본 키 값을 OID 로 쓰게 할 수도 있는데, 이때의 OID 는 테이블 안에서만 유일할 뿐 전역적으로 유일하다는 보장이 없다.[3] 이 선택지는 제품의 편의 기능이고, 객체지향 모델이 말하는 OID 는 시스템이 만드는 불변의 식별자다.
네트워크 관리(SNMP)와 ASN.1 에서 쓰는 OID(Object Identifier)는 관리 객체를 계층적 번호(예: 1.3.6.1.2.1)로 가리키는 이름 체계로, 이 문서의 데이터베이스 객체 식별자와 다르다.
- ↑ 1.0 1.1 Malcolm Atkinson 외, 「The Object-Oriented Database System Manifesto」 Object identity 절, 1989, https://www.cs.cmu.edu/~clamen/OODBMS/Manifesto/htManifesto/node4.html, 확인일: 2026-11-05.
- ↑ Ramez Elmasri, Shamkant B. Navathe, 『Fundamentals of Database Systems』 7판, Pearson, 2016, 12장 Object and Object-Relational Databases(Object Identity).
- ↑ 「9.1 General Storage Considerations for Objects」, Oracle Database Object-Relational Developer's Guide 12c Release 2, https://docs.oracle.com/database/122/ADOBJ/general-storage-considerations-for-objects.htm, 확인일: 2026-11-05.