While diesel has a native rust interface, writing more complex queries is easier when you can just pass a SQL query string.
Whether an item class is generic or specific can be deduced from whether a parent exists or not. While the SQL migration (especially the down direction) is quite complex, it simplifies the handling quite a bit.