Object database systems

Many programming languages suggest object-oriented programming, so storing these objects seems natural. It therefore makes sense to design the entire process from implementation to storage uniformly and simply. In detail, the advantages are:

Natural modeling and representation of problems

Problems can be modeled in ways that are very close to the human way of thinking.

Clearer, more readable and more understandable

The data and the functions operating on them are combined into one unit, making the programs clearer, more readable and easier to understand.

Modular and reusable

Program parts can be easily and flexibly reused.

Expandable

Programs can be easily expanded and adapted to changed requirements.

Object-relational impedance mismatch

Object-oriented programming and relational data storage are problematic for various reasons. Inheritance is an important concept in OOP for implementing complex models. In the relational paradigm, however, there is nothing like it. Object-relational mappers, ORM, such as SQLAlchemy, were developed to convert corresponding class hierarchies into a relational model. In principle there are two different approaches for an ORM, whereby in both cases a table is created for a class:

Vertical partitioning

The table only contains the attributes of the corresponding class and a foreign key for the table of the superclass. An entry is then created for each object in the table belonging to the class and in the tables of all superclasses. When accessing the tables, joins must be used, which can lead to significant performance losses in complex models.

Horizontal partitioning

Each table contains the attributes of the associated class and all superclasses. If the superclass is changed, however, the tables of all derived classes must also be updated.

Basically, when combining OOP and relational data management, two data models must always be created. This makes this architecture significantly more complex, more error-prone and more time-consuming to maintain.

Database systems

Examples of object database systems are ZODB.

Home

ZODB

GitHub

zopefoundation/ZODB

Docs

zodb.org/en/latest/tutorial.html

Application areas

Plone, Pyramid, BTrees, volatile data

Development language

Python

Licenses

Zope Public License (ZPL) 2.1

Data model

PersistentList, PersistentMapping, BTree

Query language

Transactions, concurrency

ACID

Replication, skaling

ZODB Replication Services (ZRS)

Remarks