Advantages
- They allow a modeling that is said to be closer to the real world, even if this is not really possible, in theory reducing maintenance
- Although it is possible in other types of DBs, the ability to create new data types is better, which obviously allows you to create more advanced data structures with better abstractions, more flexible and theoretically more reliable, allowing hierarchy
- Works best with object-oriented languages, avoiding the impedance mismatch
- Data navigation is done most naturally and expressively in most cases
- Some usage patterns can increase performance (do not use JOIN)
- Best reuse
There are usually some other features that are more subjective or vendor dependent, such as versioning mechanism.
Disadvantages
- Missing standardization. Each vendor uses a different form, determined a different modeling. There are several chains that propose different ways of using this model.
- Mathematical reasoning is lacking. There is a better way of expressing complex queries the way people are accustomed to doing in the relational model
- Products, although long-lived, are not yet mature, people do not adopt it because there is no general adoption and because of this, there are not enough investments for improvements
- To faithfully adopt the model there is loss of performance in several scenarios. To avoid this, there is a break in the model. Multiple access types need to be done indirectly through unneeded intermediate objects in that query
- Automatic competition can be tricky or difficult. The manual requires more from the developer
- Abstraction can hide real problems in the adopted model, it can be difficult to obtain performance
- Already well-established mechanisms in the relational model for secure access to data
- Tools, documentation, experience, qualified professionals are missing
There are some items that do not even agree if it is advantage or disadvantage:)