Создание таблиц
Для реализации логической схемы, изображенной выше, необходимо создать следующие таблицы.
Таблица категорий (B_Category)
Таблица категорий предназначена для хранения категорий расходов (напр. Развлечения или Питание) и доходов (напр. Запрлата или Стипендия) и будет два поля:
| Имя поля | Тип | Комментарий |
|---|---|---|
| ID | Integer | Уникальный идентификатор категории (первичный ключ) |
| Name | String | Наименование категории |
Для создания новой таблицы необходимо вызвать контекстное меню в окне проекта и выбрать "New->Table".
В панели свойств переименуем таблицу в "B_Category".
Теперь необходимо задать поля таблицы. Для этого необходимо раскрыть узел таблицы и вызвать контекстное меню для узла "Fields" и выбрать "New->[Необходимый тип]".
В таблице B_Category необходимо создать два поля ID (тип Integer) и Name (тип String).
Для указания длинны наименования в свойстве StringSize поля Name зададим число 100.
В MorphX существует возможность создания расширенных типов данных (Extended Data Types) - специальных типов данных, основанных на примитивных типах MorphX. Создание таких типов позволяет изменить определяемое системой поведение примитивных типов.
Для поля B_Category.ID, которое выступает в качестве первичного ключа таблицы, необходимо создать расширенный тип данных на основе Integer. Расширение типа Integer заключается в создании нового отношения (relation).
Чтобы создать такое отношения необходимо вызвать контекстное меню "New->Integer" и задать имя - "B_CategoryID".
Далее необходимо вызвать контекстное меню для узла "Relation" и выбрать пункт "New -> Normal", после чего отредактировать свойства отношения через панель свойств таким образом, как показано на рисунке.
Теперь, когда создан расширенный тип B_CategoryID, необходимо установить расширенный тип данных (Extended Data Types) для поля B_Category.ID.
Таблица аналитики (B_Analytics)
Таблица аналитики предназначена для хранения более детального разворота категорий. Например для категории Развлечения аналитикой могут служить - Кафе или Боулинг, а для Питание - Мясо или Соки.
Аналогичным образом создадим таблицу "B_Analytics" со следующими полями.
| Имя поля | Тип | Комментарий |
|---|---|---|
| ID | Integer | Уникальный идентификатор аналитики (первичный ключ) |
| CategoryID | Integer | Уникальный идентификатор категории которой принадлежит аналитика (вторичный ключ) |
| Name | String | Наименование аналитики |
После создания всех полей нужно не забыть для поля B_Analytics.CategoryID значение свойства ExtendedDataType выставляется равным B_CategoryID. А также неободимо создать новый ExtendedDataType с именем B_AnalyticsID со значением B_Analytics.ID и установить его в соответствующее свойство поля B_Analytics.ID.
В результате должна появиться следующая картинка.
Таблица авторов (B_Autor)
Таблица авторов предназначена для хранения авторов того или иного движения денежных средств.
Аналогичным образом создадим таблицу "B_Autor" со следующими полями.
| Имя поля | Тип | Комментарий |
|---|---|---|
| ID | Integer | Уникальный идентификатор автора (первичный ключ) |
| Name | String | Имя автора |
После создания всех полей нужно не забыть создать новый ExtendedDataType с именем B_AutorID со значением B_Autor.ID и установить его в соответствующее свойство поля B_Autor.ID.
Основная таблица (B_Register)
Основная таблица предназначена для хранения данных о приоде или расходе денежных средств. Но перед тем как создавать данную таблицу нам понадобятся два новых базовых типа.
Для создания нового базового типа необходимо вызвать контекстное меню в окне проекта и выбрать "New->Base Enum". Таким образом создадим следущие типы.
| Имя базового типа | Имена элементов перечисления |
|---|---|
| B_Process | Credit/Debet (Приход/Расход) |
| B_Plan | Plan/Fact (План/Факт) |
В результате должна появиться следующая картинка.
Далее по аналогии создадим таблицу "B_Register" со следующими полями.
| Имя поля | Тип | Комментарий |
|---|---|---|
| ID | Integer | Уникальный идентификатор записи (первичный ключ) |
| Plan | Enum | Признак записи - план или факт |
| DateRecord | Date | Дата записи |
| AnalyticsID | Intreger | Идентификатор аналитики (вторичный ключ) |
| Summa | Real | Сумма |
| AutorID | Intreger | Идентификатор автора (вторичный ключ) |
| CD | Enum | Признак записи - приод или расход |
После создания таблицы и всех полей необходимо в свойстве EnumType полей Plan и CD установить значения B_Plan и B_Process соответственно. А также для полей AutorID и AnalyticsID правильно заполнить свойство ExtendedDataType.
Теперь все необходимые таблицы созданы и наш проект должен выглядеть следующим образом.
Настройка дополнительных правил
Т.к. на каждую их вышеописанных таблиц будут ссылаются другие таблицы, поэтому необходимо определить правила для удаления записей из этих таблиц. Эти правила создаются в узле "DeleteActions" каждой их таблиц.
Необходимо сделать так, чтобы удалить таблицу можно быто только тогда,когда на неё не ссылается ни одной записи из других таблиц.
На таблицу B_Category ссылается таблица B_Analytics, поэтому для B_Category создадим правило удаления Restricted таким образом, как это показано на рисунке.
Аналогичные правила создадим для таблиц B_Autor и B_Analytics.
Группы объектов
Для более удобной работы с объектами проекта - можно их объединять в группы.
Для создания новой группы необходимо вызвать контекстное меню в окне проекта и выбрать "New->Grpup", после чего мышью перетащить объекты проекта в разные группы. Я, например, сделал группы Tables и Types.
У кого не получилось все сделать самостоятельно - можно загрузить файл готового проекта здесь (3 Кб).
Автор: Андрей Михайлов aka MAV