На главную   На главную   Форумы Новости Документация Скачать Купить  
Регистрация  
Система Allegro
Oб Allegro Характеристики Пример конфигурации Документация База ошибок Развитие
Версия для печати К списку книг Вернуться к оглавлению Предыдущий параграф Следующий параграф
Поиск по книге

Глава 7. СПРАВОЧНИКИ

Классы, атрибуты, наследование

Каждый регистр счетов привязан к одному справочнику объектов, например , «Товары». Допустим, что мы автоматизируем работу компании, торгующей металлическими изделиями (винтами и т. п.) и обувью. Очевидно, что разные товары могут иметь разные атрибуты. Атрибутами винтов могут быть « Металл», «Диаметр» и «Длина». Атрибутами обуви - «Материал», «Изделие», «Размер », «Цвет» и «Вид». Кроме винтов , возможно, нам понадобится в справочниках хранить разные другие металлические изделия, характеризующиеся «Металлом» и «Наименованием ». К тому же неплохо бы иметь в качестве общего атрибута «Внутренний номер объекта» (ID), чтобы использовать этот атрибут в других таблицах для ссылки на объекты справочной системы. С учетом сказанного, нам необходимы минимум три таблицы для хранения «Товаров»:

«Обувь»


ID Материал Изделие Размер Цвет Вид
           

«Винты»


ID Металл Диаметр Длнна
       

«Разный крепеж»


ID Металл Наименование
     

Как легко заметить, некоторые таблицы имеют общие по смыслу поля. Например, все три таблицы имеют поле ID . Винты и разный крепеж имеют общее поле «Металл ». Напрашивается мысль о том, чтобы хранить однородную информацию в одном месте, а не в разных таблицах. И действительно, если мы введем понятия «Товар вообще » и «Крепеж вообще», то задача намного упростится . Атрибут ID характеризует любой «Товар вообще», а атрибут «Металл» характеризует любой «Крепеж вообще». Можно даже сказать, что классы «Винты» и «Разный крепеж» наследуют атрибут «Металл» от класса «Крепеж вообще». Что же у нас получилось ? Фактически это справочная система с некоторыми объектно-ориентированными свойствами. Все объекты у нас разделены на классы. Собственно, каждый конкретный справочник и есть класс. Классы образуют дерево с наследованием атрибутов старших классов младшими классами. Каждый класс, таким образом, имеет собственные атрибуты и атрибуты, унаследованные от класса-предка. Каждому классу соответствует одна физическая таблица в базе данных, в этой таблице класс хранит только собственные атрибуты. Для полной сборки любого справочника наша программа автоматически производит объединение всех таблиц классов -предков с таблицей класса справочника по полю «Номер объекта» (ID).

Например, если мы хотим создать классы «Товары», «Крепеж», «Винты», «Другой крепеж», «Обувь», то выглядит это примерно так:



Таким образом, для строгого хранения данных, они разносятся по нескольким таблицам. И каждый объект одновременно хранится в разных таблицах. Часть атрибутов справочника «Винты» хранится в таблице класса «Крепеж». Поэтому для того, чтобы отобразить все атрибуты «винтов», как собственные, так и унаследованные от классов-предков, необходима « сборка данных» (по одной строке из разных таблиц ). Например, для сборки справочника «Винты» будут объединены таблицы: «Товары», «Крепеж» и «Винты» по полю ID. А для сборки справочника «Разный крепеж» будут объединены таблицы «Товары », «Крепеж», «Разный крепеж».

К счастью, язык структурированных запросов SQL позволяет делать такие объединения таблиц достаточно быстро. Наша программа устроена так, что сборка справочников происходит автоматически путем генерации текстов SQL- запросов. Ничего программировать не нужно.

Атрибутом класса может быть число, строка, дата, мемо-поле, картинка или ссылка на объект другого класса. В приведенном нами примере, например, поля Материал, Изделие, Цвет и Вид в действительности следует организовать в виде ссылок на отдельные мелкие справочники:

«Материалы для обуви»


ID Наименование
25 Кожа
27 Пластик
28 Резина

«Обувные изделия»


ID Наименование
38 Сапоги
39 Кроссовки
40 Туфли

«Цвета»


ID Наименование
95 Черн.
96 Коричн.

«Виды обуви»


ID Наименование
70 Муж.
71 Жен.

Итак, в реальности в таблице класса «Обувь» в основном хранятся ссылки:

«Обувь»


ID Материал Изделие Размер Цвет Вид
487 25 38 37 95 71
511 25 40 37,5 96 71

Разрешение ссылок (превращение ID в краткие наименования) программа осуществляет автоматически, присоединяя при сборке справочника еще и специальную таблицу наименований, так что пользователь видит нормальную таблицу, содержащую в колонках соответствующие названия, а не внутренние номера , которые реально хранятся в базе. Все объекты справочной системы имеют уникальные внутренние ID, которые поставляет генератор OBJECT _ID_GEN.

Такая организация справочной системы позволяет одновременно решить ряд проблем:

  • Регистру счетов достаточно присвоить базовый класс какого-то дерева классов справочной системы и тот сможет работать одновременно со всеми объектами классов-потомков, какой бы атрибутикой те не обладали. А это означает для программиста, конфигурирующего систему под задачу пользователя, возможность быстрого и корректного анализа бухгалтерских данных по любому атрибуту каждого отдельно взятого класса.
  • Декларативная ссылочная целостность (на основе ключей foreign keys) пронизывает всю систему ссылок и не позволяет, с одной стороны, случайно удалить ни один объект, используемый в других справочниках или документах, а с другой стороны предельно повышает скорость объединения таблиц при сборке справочников. Важно и другое - сообщение о невозможности удаления объекта пользователь получает мгновенно .
  • Ссылочная природа справочников позволяет автоматически подчинять два справочника друг другу , для чего окно справочника делится пополам. В этом режиме в нижней части окна отображаются закладки всех справочников, которые могут быть подчинены справочнику, отображаемому в верхней части . Остается лишь выбрать нужную закладку. Например, перебирая «обувные изделия», можно тут же видеть всю обувь , отфильтрованную по данному признаку. Или, выбрав « Фирму», автоматически видеть все ее реквизиты. И все это без потери скорости, благодаря индексам.
  • Всегда можно добавить новый атрибут в класс и его автоматически приобретут все объекты классов-потомков.
  • Способ хранения данных соответствует самым строгим требованиям теории реляционной баз данных (степень нормализации 3…5), что значительно упрощает использование данных в SQL-запросах и повышает непротиворечивость хранимой информации и устойчивость данных к изменению структуры справочников.


Система Allegro. Руководство разработчика Наверх