Требуется извлечь только имена заказчиков
Если требуется извлечь только имена заказчиков, иерархическая база отработает исключительно быстро, напрямую переходя от родительской таблицы к дочерней. В то же время для получения любой информации из такой базы требуется четкое знание ее структуры, которую вряд ли можно назвать гибкой. К примеру, если вы решите оформлять заказы через посредников, придется полностью перестраивать все отношения, так как теперь таблица ORDER HEADER более не будет связана напрямую с таблицей CUSTOMER. Во все запросы теперь придется внедрить дополнительный этап: поиск посредника, оформившего заказ, и определение конечного потребителя. Также совершенно очевидно, что проблемы избыточности избежать не удастся: если найдется такой конечный потребитель, который оформляет заказы более чем через одного агента, информацию о посредниках придется реплицировать в несколько таблиц. Спрашивается, как поступать, если некоторые клиенты не оформляли заказы, или существуют товары, которые еще никто не покупал? С такой ситуацией иерархическая база данных попросту не справится, поскольку добраться до информации в дочерней таблице при отсутствии указателя на нее в родительской невозможно. Из самого определения иерархии следует, что не может существовать как товаров, так и клиентов без заказов, хотя на практике такие ситуации вполне естественны. Иерархические базы данных неплохо поддерживают отношения “один ко многим” (об этом речь пойдет в главе 2). Однако во многих ситуациях требуется, чтобы один дочерний объект был связан со множеством родительских. К примеру, один товар может присутствовать во множестве заказов, а каждый заказ содержать несколько продуктов. Для подобных вопросов иерархические базы данных не позволяют получить решение (по крайней мере простое).