Абриаль 2.1 Назад Начало Выше Дальше16/08/03 А.И.Пацкин [packin.ru]
Разработка веб-интерфейса ] Abrial DDL ] [ Конструирование БД ] Ассоциации ] Правила. Продукционное программирование ] Схема ядра ]

Конструирование БД


В данном разделе описывается, как создать свою собственную базу знаний.


Конструирование базы данных

Общие замечания

Для создания новой базы данных нужно проделать следующее:

С чего начать

Прежде всего, желательно сделать либо в текстовой, либо - в графической форме план новой базы данных. За основу нужно взять либо другую базу данных, сохраненную прежде в файле, либо совершенно новую пустую базу данных, формирующуюся в памяти при отказе выбрать файл в предлагаемом системой диалоге загрузки.

Итак:

  1. Необходимо запустить программу abrial.exe
  2. либо, если программа уже была запущена - закрыть все окна.
  3. Выбрать меню File:Table, вызывая диалог выбора файла для загрузки из него базы данных.
  4. Если за основу берется старый файл - выбрать его и нажать Enter
  5. либо нажать Esc, если база данных конструируется с нуля.
  6. В любом случае появится таблица классов. Если база данных не загружалась, то таблица будет пуста.
  7. Установить уровень доступа - Designer. В любом случае в таблице класса мы увидим строчку для класса отношений - LINK.

Создание классов

Новые классы удобней всего создавать, вводя их имена в самой нижней строке (строке ввода) таблицы классов. Там доступна для ввода только одна - первая ячейка.

Если таблица классов станет такой большой, что переходить в её конец станет неудобно, можно нажать клавишу Insert в первом столбце после титульного столбца, и затем - ввести имя нового класса в появившемся диалоге вставки нового объекта-сущности Create New.

Кстати заметим, что точно так же, как классы, вводятся все новые глобальные сущности. В том числе отношения (т.е. их дескрипторы).

Для новых классов следует задать их категорию, что производится нажатием Insert и выбором категории в столбце CAT1. Однако для классов сущностей это делать не обязательно, поскольку категория ITEM, соответствующая сущностям, подразумевается по умолчанию.

Однако, может возникнуть вопрос - как попасть в таблицу классов, если после первичной загрузки, (всегда открывающей сначала таблицу классов), мы успели переместиться в другой табличный вид. Для этого проще всего перейти в таблицу отношений (нажав Ctrl-L), и затем нажать Esc. Или проще - много раз нажимать Esc, пока заголовок таблицы не станет ITEMS(CLASS).

Формирование системы наследования классов

Наследование классов, если оно есть, задается в таблице классов. Если со стороны классов наследников, то в аспекте (в столбце) ISA, а если со стороны предков, то в столбце BASE_FOR.

Например, мы завели три класса: Личность, Мужчина, Женщина. И хотим задать два факта наследования

ISA(Мужчина,Личность)

ISA(Женщина,Личность)

для задания такого наследования, мы в столбце ISAдля строчек Мужчина и Женщина поочередно, нажимаем Insert, вызывая список выбора классов, и в этом списке выбираем класс Личность.

Если мы всё сделали правильно, то в столбце ISA для классов Мужчина и Женщина появится <Личность>, а в столбце BASE_FORдля класса Личность появится {Женщина,Мужчина}.

 

Создание отношений

Отношения создаются в таблице отношений, в которую легко попасть отовсюду, нажав Ctrl-L. Чтобы создать отношение, нужно нажать Insert в столбце имен отношений, и затем ввести имя нового отношения в появившемся диалоге Create New. Можно также воспользоваться последней строкой ввода, для ввода новых имен отношений.

Конструирование аспектов

Создание аспектов - наиболее сложная и ответственная задача. Для начала нужно войти в таблицу аспектов одного отношения. Для этого нужно

  1. Выбрать нужное отношение в таблице отношений.
  2. В столбце аспекта LINK_SLOTS ввести по очереди все имена аспектов этого отношения (нажимая Enter после ввода каждого имени).
  3. После этого войти в таблицу аспектов (нажав Enter в столбце аспекта LINK_SLOTS). Это можно сделать сразу после ввода первого имени аспекта. Имена остальных аспектов можно ввести в строке ввода.
  4. Теперь можно задавать свойства аспектов.

Пусть мы проделали все это для отношения Родитель.

Допустим, это отношение определяется следующим образом:

Родитель:LINK(Родители:{&Личность},Дети:(&Личность))

Тогда для обоих аспектов нужно ввести домен Личность, нажав Insert в столбце DOMAIN и в появившемся списке классов выбрав Личность. Теперь оба аспекта получили один и тот же класс-домен, а класс Личность получил два новых атрибута.

Далее следует указать категорию обоих аспектов. Мы видим, что по принятой системе обозначений аспект Родители - множественный, а аспект Дети - списочный. Зададим это в столбце ATYPE. Для этого нажмем Insert в этом столбце поочередно для обоих аспектов, и выберем для аспекта Родители категорию SET, а для аспекта Дети - категорию LIST.

В полученной таблице мы могли бы отметить нажатием Enterв столбце HOLD владеющие аспекты, но мы этого не делаем, т.к. оба аспекта - ссылочные, что указывает знак & в определении аспекта перед доменом Личность.

Кроме того, можно также нажатием Enter отметить признак полиморфных аспектов POLY, если мы хотим, чтобы аспекты Родители и/или Дети стали полиморфными, т.е. передаваемыми по наследству от класса Личность его наследникам: классам Мужчина и Женщина.

Конструирование ключей

Рассмотрим для примера, отношение Ведомость, задающее ежемесячные платежные ведомости, в которых отражается, Кто из работников и За какой месяц и Сколько получил.

Ведомость:LINK(Кто:{&Личность},За:{&Месяц},Сколько:NUM)

Таблица аспектов в этом случае будет выглядеть так.

Обратим внимание, что аспект Сколько является владеющим, т.к. число Сколько зависит от этого отношения. Здесь по смыслу аспекты Кто и За образуют ключ, т.к. определенный работник за данный месяц может получить только одну сумму. (Так в нашем примере, а в жизни бывает по-разному).

Образуем ключ с именем Вед1, для чего введем это слово в графе SKEY аспекта Кто, а затем нажмем Insert и выберем его в графе SKEY аспекта За. (Можно наоборот).

Теперь осталось только привязать новый ключ к самому отношению Ведомость, для чего выйдем из таблицы аспектов в таблицу отношений, нажав Esc, и выберем новый ключ после нажатия Insert в графе LKEY.

Ключ создан. Можно вводить ведомости в естественном виде, не опасаясь случайного возникновения дубликатов.

Настройка табличного интерфейса

Сформированное в предыдущем разделе отношение Ведомость обладает одним недостатком. Дело в том, что в качестве заголовков столбцов в таблицах по умолчанию берутся имена соответствующих аспектов. Имена бинарных аспектов Родители и Дети выбраны удачно в этом смысле и с ними нет проблем. Но для трехместного отношения Ведомость, имена Кто и За понятны, только если на них смотреть со стороны отношения, т.е. в объектном столбце. Но если смотреть со стороны объекта класса Личность, то столбец, озаглавленный Кто, имеет довольно загадочный смысл.

Для нас было бы лучше, если бы аспектный столбец, ведущий к полученным некоторым работником суммам, назывался, например, так: Получил. Для этого существует специальный текстовый атрибут аспекта, с названием TITLE. Зададим правильные названия столбцов в таблице аспектов Ведомость. Чтобы попасть туда, нажмем Ctrl-Lи выберем графу LINK_SLOTS этого отношения.

Сделав эту косметическую операцию, мы вернемся в таблицу представителей класса Личность, и увидим, что столбцы стали называться более внятно.

Теперь, нажав Enter в графе Получил объекта Борис мы увидим, что получал Борис.

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


Все права защищены. © 2000-2004 РосНИИ ИИ
http://artint.ru
Copyright. © 2000-2004 by RRIAI
Александр Иосифович Пацкин [mailto:aleksandr@tochka.ru].
16/08/03

К началу документа.