Without knowing anything about how org mode is really coded under the hood, I'm guessing (from reading the documentation) it is simply built on the emacs folding code, i.e., there is no real underlying hierarchy algorithm(s) that you could hack into in order to make org mode more database-like (tree, graph, or otherwise).
Some of these thoughts came from the simple examples given in "Land of Lisp" where a simple nodes and edges representation was given with a-lists:
(defparameter *nodes* '(living-room garden attic))
(defparameter *edges* '((living-room (garden west door)
(attic upstairs ladder))
(garden (living-room east door))
(attic (living-room downstairs ladder))))
The nodes are living-room, attic, and garden. And the edges are an a-list keyed on the nodes, e.g., living-room has two edges, one connected to the attic (upstairs by way of a ladder), the other to the garden (to the west by way of a door).
I guess this is beginning to sound like a weak graph database hack, but as I envisioned it, each node -- an org mode entry -- could be leveraging org mode's big strengths: literate programming and loose, do-it-yourself text data storage.
LB
North Shore MN