Главная    Почта    Новости    Каталог    Одноклассники    Погода    Работа    Игры     Рефераты     Карты
  
по Казнету new!
по каталогу
в рефератах

Иерархические структуры в реляционных базах данных

ту.   Например,
конструкторы РБД не обладают данным  свойством  (так  конструктор  множества
может применяться только к кортежам,  а  конструктор  кортежей  —  только  к
первичным типам).


                                   Глава 4


                           Иерархические стpуктуpы


      Дерево представляет собой иерархию элементов,  называемую  узлами.  На
самом верхнем уровне иерархии имеется только  один  узел  -  корень.  Каждый
узел, кроме корня, связан с одним узлом на более высоком уровне,  называемым
исходным узлом для данного узла. Ни  один  элемент  не  имеет  более  одного
исходного.  Каждый  элемент  может  быть  связан  с  одним  или   нескольким
элементами  на   более   низком   уровне.   Они   называются   порожденными.
Иерархические структуры относительно просто создаются и поддерживаются.  Это
важно для ряда приложений, однако  множество  данных  по  своей  природе  не
связаны в древовидные структуры. Во многих  структурах  данных  одна  запись
требует  более  одного  представления  (поэтому   приходится   разрабатывать
способы объединения данных,  которые  по  разному  представляются  различным
пользователям, в одну общую схему БД. В результате получаются  обычно  более
сложные  структуры  по  сравнению  с   древовидными.   Поэтому   программное
обеспечение,   сконструированное   только   для   работы   с    древовидными
структурами, имеет ограниченное применение  и  не  редко  сильно  влияет  на
возможности увеличения объема и развития БД.
      Принципиальным для иерархического представления  данных  является  то,
что каждый экземпляр записи приобретает свой смысл только  тогда,  когда  он
рассматривается в своем контексте; подчиненный  экземпляр  записи  не  может
существовать без своего предшественника по  иерархии  (несимметричность  или
асимметрия).  Асимметрия  -  основной  недостаток  иерархического   подхода,
поскольку она затрудняет  работу  пользователя.  В  частности,  пользователь
вынужден тратить время и усилия на решение проблем, связанных со  спецификой
модели и никак не следующих из характера задаваемых вопросов. Очевидно,  что
такие  проблемы  усугубляются  по  мере  увеличения  числа  типов   записей,
представленных в структуре, и по мере роста сложности иерархии. Кроме  того,
иерархическая  модель  обладает  еще  некоторыми  нежелательными  свойствами
аномалии, которые ярко проявляются в связи с выполнением каждой из  основных
операций запоминания (добавление, удаление, модификация).
      Длительный опыт использования иерархических систем  показал,  что  они
весьма эффективны лишь для достаточно простых задач, но они  практически  не
пригодны для использования  в  сложных  системах  с  оперативной  обработкой
транзакций  и  распределенной  архитектурой.  Иерархическая  организация  не
может  обеспечить  быстродействие,  необходимое  для   работы   в   условиях
одновременного модифицирования файлов несколькими прикладными  подсистемами.


      4.1. Иерархические структуры в реляционных базах данных

      Окружающий  мир  переполнен  иерархическими  данными.  В  это  широкое
понятие входят компании, состоящие из дочерних компаний,  филиалов,  отделов
и рабочих групп;  детали  из  которых  собираются  узлы,  входящие  затем  в
механизмы; специальности,  специализации  и  рабочие  навыки;  начальники  и
подчинённые и т. д. Любая группа объектов, в которой один объект может  быть
«родителем» для произвольного числа других  объектов,  организована  в  виде
иерархического дерева. Очевидным примером может послужить иерархия  объектов
VCL- класс TEdit представляет частный случай TСontrol, потому  что  TСontrol
является его предком. С другой стороны,  TEdit  можно  рассматривать  и  как
потомка TWinControl или  TCustomControl,  потому  что  эти  классы  являются
промежуточными уровнями иерархии VCL.
      Подобные связи не имеют интуитивного  представления  в  рамках  модели
реляционных баз данных. Нередко иерархические  связи  являются  рекурсивными
(поскольку любая запись может принадлежать  любой  записи)  и  произвольными
(любая запись может принадлежать другой  записи  независимо  от  того,  кому
принадлежит последняя). В двумерной таблице даже отображение  иерархического
дерева становится непростым делом,  не  говоря  уже  о  запросах.  Иногда  в
критерий запроса входит родословная объекта (то есть его родители,  родители
его родителей и т д.) или его потомство (сюда входят дочерние объекты и  всё
их потомство).

      4.2. Вложенные рекурсивные иерархические данные

      Термин «рекурсивные иерархические  данные»  означает,  что  базовые  и
подчинённые данные находятся в одной таблице: одно не ключевое  поле  записи
содержит ключевое значение другой записи, и это означает, что вторая  запись
принадлежит первой. Не ключевое поле называется внешним  ключом,  даже  если
по нему устанавливается связь с другим  полем  этой  же  таблицы.  Дочерние,
подчинённые записи не знают, является ли их базовая запись  подчинённой  для
какой-то другой записи - для них это несущественно. Каждый уровень  обладает
своим набором базовых и подчинённых записей, и  при  «раскрытии»  конкретной
подчинённой записи изменяются только конкретные отображаемые данные.

      4.3. Отображение данных

      Перемещение вверх и вниз по иерархическому дереву неизбежны, однако вы
можете  воспользоваться  средствами,  которые  автоматизируют  эту   задачу.
Подумайте, как пользователи будут работать с данными.  Возможно,  их  вообще
не интересует иерархическая структура данных, но они захотят  искать  объект
по его предку. Или они  будут  искать  объект  по  тому  имени,  которым  он
представлен  в  иерархии,  или  только  среди  потомков  текущего   объекта.
Возможно, им потребуется узнать только идентификатор найденного объекта  или
же получить список всех его потомков или предков.
      В частности, вам придётся решить основной вопрос – что  делать,  когда
пользователь требует вывести «следующий» объект? Таким объектом может  быть:
следующий  потомок  родителя  текущего  объекта;  первый  потомок   текущего
объекта; следующий  родитель,  если  текущий  объект  является  единственным
потомком, или даже первый потомок  следующего  «родственника»  (sibling).  В
визуальном  интерфейсе  интуитивные  ожидания   пользователя   основаны   на
положении текущего объекта в иерархии, способе его отображения  и  действиях
самого пользователя, а  не  только  на  логическом  протоколе,  определяемом
абстрактной структурой данных приложения.
       Помимо  компонента  TDBGrid,  очевидным  кандидатом  для  отображения
иерархических данных  являются  компонент  TTreeView.  Этот  компонент  были
создан специально для отображения древовидных структур,  а  не  традиционных
линейных  списков.  Он  может  занимать  довольно  большую  область  экрана,
поэтому не стоит  применять  его  везде,  где  пользователь  должен  выбрать
объект иерархии. Кроме  того,  при  работе  с  этим  компонентом  желательно
загружать в память всю  структуру.  Компонент  можно  настроить  так,  чтобы
«ветки» загружались по мере надобности, однако  такая  гибкость  достигается
ценой снижения производительности.
      Целостность структуры и циклические ссылки
      По иронии судьбы рекурсивная иерархия в одной таблице заметно упрощает
обеспечение целостности структуры: одно поле таблицы  ссылается  на  другое,
принадлежащее этой же таблице. При  этом  защищаются  все  потомки  объекта.
Если же объединяющие значения находятся в нескольких полях или  таблицах,  в
результате  чего  становится  возможной   многоуровневая   группировка   или
установка сложных связей, обеспечить целостность структуры будет сложнее
      Для  программы,   работающей   с   иерархией,   наибольшую   опасность
представляют циклические ссылки. Если объект  ссылается  на  несуществующего
родителя, проблему можно заметить и исправить.  Но,  если  родитель  объекта
оказывается одновременно и его потомком (если объекты разделены  несколькими
промежуточными  поколениями,  такую  ситуацию  будет  нелегко   обнаружить),
программа зацикливается.
      Где же выход? Можно проверять каждого «кандидата в предки» и смотреть,
не присутствует ли какие-либо из его предков в текущем «семействе»  (правда,
это будет  накладно  с  точки  зрения  производительности).  Кроме  того,  в
программу  можно   вставить   счётчик-предохранитель,   который   инициирует
исключение  после  определённого   количества   циклов   поиска.   Одно   из
преимуществ графических иерархических элементов  как  раз  и  заключается  в
том, что пользователь просто не сможет создать циклическую ссылку,  так  как
это противоречит логике работы с элементом.
      При  работе  с   иерархиями   используется   «семейная»   терминология
(родители,  внуки,  предки,  потомки),  поскольку   семья   является   самым
распространённым примером объектов (в данном случае –  людей),  объединённых
иерархическими отношениями. Этот пример напомнит вам одну простую  истину  –
хотя вы можете построить систему, предназначенную для  обобщённой  обработки
рекурсивных иерархий, ценность каждого объекта определяется  той  уникальной
информацией, которая  в  нём  хранится.  В  то  же  время  место  объекта  в
иерархическом дереве - не более чем условное  обозначение  связи  с  другими
объектами. Иерархическая структура всего лишь  помогает  сохранить  и  найти
объект.



                                   Глава 5


                           OLE: основные сведения

      Специфика предметов математики, физики, программирования  такова,  что
контрольные работы, зачёты, проверочные требуют  наличия  графиков,  формул,
диаграмм. Поэтому возникает проблема отображения данных.  Достаточно  трудно
написать такую универсальную программу, которая  справилась  бы  с  этим.  С
12345След.
скачать работу

Иерархические структуры в реляционных базах данных

 

Отправка СМС бесплатно

На правах рекламы


ZERO.kz
 
Модератор сайта RESURS.KZ