[odb-users] Store a tree in ODB
Boris Kolpackov
boris at codesynthesis.com
Tue Nov 27 07:58:10 EST 2012
Hi Davide,
Davide Anastasia <Davide.Anastasia at qualitycapital.com> writes:
> However, my suggested solution will enforce a foreign key in the
> m_father relation, and I am not sure whether I can put a null value
> in there for the root of the tree (DBMS might refuse this value, am
> I right?).
You can store NULL in the pointer as long as you don't declare the
pointer not_null.
> I've slightly rethink this solution in this way:
>
> Class Node
> {
> //...
> Private:
> std::vector< odb::boost::lazy_shared_ptr< Node > > m_children;
> };
>
> In this way I am actually generating a supplementary table that stores
> the tree structure, which I can navigate both ways to discover for each
> node either its father or its children. Does that sound like a more
> reasonable approach?
The additional table seems wasteful to me, especially since you can
achieve the same functionality without it:
#pragma db object
class Node
{
odb::boost::lazy_shared_ptr< Node > m_parent;
#pragma db inverse(m_parent)
std::vector< odb::boost::lazy_weak_ptr< Node > > m_children;
};
Boris
More information about the odb-users
mailing list