Навігація
Головна
 
Головна arrow Інформатика arrow Бази даних
< Попередня   ЗМІСТ   Наступна >

Багатовимірна модель даних

Взагалі кажучи, ММД може взаємодіяти і з реляційної БД, тому даний параграф доречний і в гол. 5. Однак взаємодія з об'єктно-орієнтованою моделлю переважніше, і тому розглянемо ММД тут.

Багатовимірна модель використовується, як зазначалося раніше, у сховищах даних. Є три різновиди ММД: MOLAP, ROLAP, HOLAP.

MOLAP передбачає формування так званого багатовимірного куба (гіперкуба). Тривимірний куб показаний на рис. 7.4.

Кожна з координат куба називається виміром. Вимірювання реалізуються за допомогою індексів, які, як відомо, дозволяють різко збільшити швидкість доступу до даних. За різними оцінками, ця швидкість в 10-100 разів вище, ніж в реляційних моделях даних. Значення результату в багатовимірної моделі поміщається на перетині (в комірці) відповідних значень вимірів.

Тривимірний куб

Рис. 7.4. Тривимірний куб

Аналогом такої моделі можна вважати завдання функції, наприклад, Z = f (x, y). У ММД координати х і у суть вимірювання, а Z - значення-результат. Як і у функції декількох змінних, в ММД повинна бути передбачена можливість "руху" як усередині одного виміру, так і переходу з одного виміру на інше (наприклад, від "лінії" до "площині").

За збільшену швидкість доступу доводиться платити збільшеним об'ємом пам'яті. Співвідношення між корисним і потрібним обсягами пам'яті в багатовимірної моделі даних в 5-10 разів більше, ніж в реляційної моделі даних. Крім того, в ММД багато порожніх осередків, і потрібні спеціальні ефективні програми зберігання значення NULL. Бажано видалення порожніх осередків. У багатовимірної моделі виконуються чотири основних операції: агрегація (згортка) даних; дезагрегація (деталізація) даних; перетин (при фіксованих значеннях одного або декількох вимірювань); обертання (для двовимірного випадку це аналог транспонування матриці).

У ROLAP використовуються реляційні "складові". Можливі дві схеми структури: "зірка" (рис. 7.5) і "сніжинка" (рис. 7.6).

Схема

Рис. 7.5. Схема "Зірка"

Схема

Рис. 7.6. Схема "Сніжинка"

У будь-якій схемі виділяються один фактологическая таблиця, в якій, власне, і зберігаються дані, і кілька довідкових таблиць, кожна з яких характеризує одну з розмірностей куба. При використанні схеми "зірка" потрібне проведення денормалізації даних.

ROLAP дозволяє дати характеристику розмірності сховища даних (табл. 7.3).

Таблиця 7.3

Розмірність сховища даних

Розмірність

Граничний обсяг, Гбайт

Число рядків н фактологічної таблиці, млн

Маленька

3

1-10

Середня

25

11-100

Велика

200

101-999

Надвелика

Більше 200

1000 і більше

Порівняння MOLAP і ROLAP дає наступні результати:

  • • MOLAP володіє високою швидкодією, але виникають проблеми зі зберіганням великих обсягів даних;
  • • ROLAP не має обмежень на обсяг даних, проте володіє набагато меншим швидкодією.

Звідси виникає ідея побудови HOLAP, який поєднує гідності MOLAP і ROLAP.

HOLAP. Справа в тому, що всі дані ХД одночасно ніколи не потрібні. Щоразу використовується лише їх частину. У зв'язку з цим доцільно дані розділити на предметні підобласті, які називають кіосками (магазинами, вітринами) даних. Кіоск даних [17] - спеціалізоване тематичне сховище, обслуговуюче один з напрямків діяльності фірми.

У цьому випадку центральне сховище може бути реалізоване з використанням реляційної БД, а основні дані зберігаються в численних кіосках.

CACHE як система управління об'єктно-орієнтованої базою даних

Покажемо деякі особливості побудови об'єктно-орієнтованої бази даних на прикладі СУБД CACHE.

Насамперед звернемо увагу на об'єктно-орієнтоване (об'єктне) побудова власне БД в рамках СУБД CACHE, оскільки об'єктне побудова інтерфейсу користувача і алгоритму додатки детально обговорювалося в гл. 1.

У СУБД CACHE використовується "об'єктна" специфічна термінологія, дещо відмінна від системи визначень об'єктно орієнтованого підходу.

Щоб було ясно, про що йде мова, зведемо цю термінологію в таблицю (табл. 7.4), з якої видно особливості структури ООБД (ООСУБД).

  • 1. Осередки таблиць, як і в розширених ОРБД, неатомарни. В якості осередків можуть виступати колекції (списки, масиви), що відповідає списками (List) і багатовимірним наборам (MULTISET) в розширеній об'єктно-реляційної БД.
  • 2. Зв'язки між класами встановлюються через покажчики (OID, OREF).
  • 3. Загальні підтаблиці декількох таблиць формуються як вбудовуються об'єкти (аналог абстрактних класів ROW, і насамперед - ROW TYPE об'єктно-реляційних БД).
  • 4. Передбачена можливість зберігання великих об'єктів.

Таблиця 7.4

Порівняльна термінологія

CACHE

Реляційні БД

Об'єктно-орієнтований підхід

Клас

Таблиця

Клас

Примірник класу (об'єкт)

Рядок

-

Ідентифікатор OID

Ключ

-

Властивість

Стовпець, поле

Властивість

Посилання на зберігається об'єкт

Зовнішній ключ

-

Вбудований об'єкт

Повторювані поля, використовувані в кількох таблицях

-

Метод класу

Збережена процедура

Метод

Колекція -список

Стовпець з ячейкой- списком

-

Колекція-масив

Підтаблиця

-

Запит

Збережена процедура або вид

-

Потік даних

BLOB

-

Розглянемо побудову власне бази даних.

Відповідно до об'єктно-орієнтованим підходом слід розглянути поняття "клас" і асоційовані з ними терміни (властивість, метод).

Поняття "клас" у СУБД CACHE досить багатогранно (рис. 7.7). Насамперед виділяють класи типів даних і класи самих даних (класи об'єктів, таблиці).

Види класів

Рис. 7.7. Види класів

Термін "клас" у СУБД CACHE має два розуміння: об'єкт; безліч (підмножина).

Класи типів даних (у тому числі створених користувачами) приписуються атрибутам (полях, властивостям) об'єктів (таблиць), які отримують дані того чи іншого типу в якості значень. Ці класи не можуть містити властивостей і утворювати екземпляри, не мають власної ідентифікації (для посилань), однак володіють методами. Кожен тип даних являє собою клас. Класи типів даних можуть створюватися і користувачами.

Є три формату типів даних: зберігання в БД (storage), логічний (logical) в пам'яті комп'ютера, відображення (display) на екрані монітора. Формати можуть бути перетворені одна в одну.

Методи класів типів даних надаються через інтерфейс типів даних (з їх параметрами). Перелічимо основні типи даних (в логічному форматі):% Library.String,% Library.Binary,% Library.Boolean, %% Library.List (формат списку), Library.Numeric,% Library. Integer,% Library.Float,% Library.Name (ім'я у форматі "Прізвище Ім'я"),% Library. Date,% Library.Time,% Library.Currency (грошовий).

Об'єктом називають екземпляр класу (рядок) на відміну від реалізації компоненту у відповідному контейнері (як, наприклад, в програмному продукті Delphi).

Клас об'єктів визначає структуру даних і поведінку об'єктів одного типу. Клас об'єктів характеризується ім'ям класу, властивостями, методами.

У класах об'єктів за характером процесів виділяють незареєстровані та зареєстровані класи.

Незареєстровані класи не підтримують поліморфізм і не володіють автоматичним управлінням. Призначення ідентифікаторів (OID) і об'єктних посилань (OREF) здійснює користувач.

Зареєстровані класи підтримують поліморфізм і управляються автоматично від системного класу% Library. RegisteredObject (аналог класу TObject в Delphi). Примірники цього класу існують в пам'яті процесу тимчасово (тимчасові об'єкти).

З погляду зберігання даних зареєстровані та незареєстровані класи діляться на збережені і вбудовувані.

Збережені класи об'єктів успадковуються від системного класу% Library. Persistent і здатні тривало зберігатися в пам'яті об'єкта. Примірники таких класів володіють однозначними об'єктними ідентифікаторами OID. Зберігається об'єкт може використовуватися і як властивість класу (стовпець таблиці) іншого об'єкта. Іншими словами, можлива посилання на цей об'єкт, що відповідає зв'язку I: М двох таблиць реляційної БД.

Вбудовувані класи об'єктів успадковують свою поведінку від системного класу% Library.SerialObject і можуть бути збережені тільки у складі відповідних збережених об'єктів. Вбудований об'єкт в пам'яті характеризується об'єктної посиланням, в базі даних зберігається в послідовній формі (різновид колекції-масиву) як частина збереженого об'єкта, при цьому ідентифікатор OID відсутня.

Побудова класів об'єктів можливо в режимі діалогу або за допомогою мов програмування (командний рядок, програма). У діалоговому режимі можливо використовувати візуальну мову (аналог мови QBE для запитів) або супроводжуючий його мова визначення класів (CACHE Definition Language - CDL) - аналог мови SQL в реляційних БД.

В якості властивостей (рис. 7.8) виступають константи (незалежно від класу типу), вбудовані об'єкти, посилання на об'єкти, потоки даних BLOB, колекції, багатовимірні змінні, двонаправлені зв'язку між збереженими об'єктами.

Потоки даних BLOB мають два різновиди для символьних (CHARACTERSTREAM) і довічних (BINARYSTREAM) даних (аналогічно CLOB і BLOB для гібридних ОРБД).

Колекції можуть бути списком (List Collection) і масивом (Array Collection). До їх складу можуть входити константи, вбудовані об'єкти та посилання, які задаються відповідно% Library. ListOfDataTypes,% Library.ListOfObjects,% Library.ArrayOfDataTypes,% Library.ArrayOf Objects.

Типи властивостей

Рис. 7.8. Типи властивостей

У колекції-масиві впорядкування ведеться по полю, прийнятому в якості ключа.

У колекції-списку в якості ключа виступає позиція елемента в списку.

Зв'язок є двобічної - взаємні посилання між таблицями. Вони гарантують посилальну цілісність.

Є тимчасові (буферна пам'ять) і обчислювані властивості.

Методи, як уже зазначалося, пов'язані з типом даних. За замовчуванням приймається тип даних String.

Аргументи методу за замовчуванням передаються за значенням, а для передачі за посиланням аргументу повинен передувати символ &. Методи, як і властивості, можуть бути визначені як public або private.

Виділяють методи класу і методи екземплярів класу (посилання - ## this). Останні використовуються частіше.

У об'єктної моделі виділяють:

  • • метод-код (код програм мовою CACHE ObjectScript);
  • • метод-вираз (один вираз коду програми), в якому передача параметрів проводиться за посиланням, використання макросів, "вбудованих" фрагментів SQL не допускається;
  • • метод-виклик (підпрограм);
  • • генератор методу, використовуваний при компіляції програми і класів (щоб класами можна було користуватися).

Властивості характеризуються ім'ям класу, ім'ям властивості, типом даних, ключовими словами, параметрами для типів даних. Властивості можуть бути відкритими (public) і закритими (private).

Властивість пов'язана з набором методів, який має два джерела:

  • 1) клас властивостей (методи доступу Get () і Set ());
  • 2) тип даних.

Для класів CACHE, поряд з такими поняттями, як "властивість", "метод", характерні специфічні поняття "параметри класу", "запити", "індекси".

Параметри класу використовуються при компіляції.

Запит - операції з множинами примірників класів. Результат запиту доступний через спеціальний інтерфейс обробки результатів запитів ResultSet. Запити можуть мати форму збережених процедур.

Індекс - шлях доступу до примірника класу. Він використовується для підвищення швидкості виконання запитів. Індекс створюється на основі одного або декількох властивостей (полів).

Взаємодія описаних складових частин СУБД (БД) забезпечується мовами програмування.

У CACHE існує три види доступу (рис. 7.9).

Види доступу в СУБД CACHE

Рис. 7.9. Види доступу в СУБД CACHE

Об'єктний доступ здійснюється в діалозі або за допомогою мови програмування CACHE ObjectScript.

У прямому доступі використовується багатовимірна модель даних (ММД). Саме в багатовимірної структурі ядра БД зберігаються дані.

Суть ММД фактично полягає в завданні значень деякої функції від безлічі координат.

Нехай координати мають поточні значення i, j, k, l відповідно, а значення "функції" в цій "точці" - А .. кГ Тоді це значення можна визначити багатовимірної матрицею або набором

<I, j, k, l, A ijkl>.

В рамках СУБД CACHE цей факт записується у вигляді A (i, j, k, l) = А ijkl.

Виникає питання реалізації такої моделі. Для цього використовують B * -дерево - ієрархічне У-дерево, в кожному вузлі якого є блок. У цьому випадку дані у вузлах представляються "координатами" і значеннями (рис. 7.10).

В * -дерево

Рис. 7.10. В * -дерево

У якості "координат" зручно використовувати індекси, а в рамках СУБД CACHE - глобальні змінні (ГЛОБАЛЬ).

ММД не розглядається як інструмент реалізації додатків, а служить основою зберігання даних і використовується при побудові сховищ даних (систем OLAP).

Особливий інтерес з позицій "перекачування" даних з реляційної СУБД в об'єктно-орієнтовану представляє SQL-доступ. Основу SQL-доступу становить мова програмування SQL2 (або SQL92). Ця мова призначена для реляційних баз даних. СУБД CACHE, як показано в гл. 2, відрізняється за структурою від реляційних СУБД. Основні відмінності пов'язані з неатомарностью осередків БД. У таких осередках може бути присутнім вбудований клас (таблиця) або колекція.

До того ж необхідно реалізувати процедури успадкування.

Таким чином, слід трансформувати мову SQL2, щоб стало можливо оперувати з неатомарнимі осередками і забезпечити процедуру успадкування.

Саме цим шляхом (а не по шляху створення нової мови SQL3) пішли творці СУБД CACHE.

Насамперед слід зазначити, що в рамках єдиної архітектури CACHE кожен клас об'єктного подання є таблицею з тим же ім'ям, а кожна таблиця реляційної парадигми - об'єктом. Співвідношення об'єктів та реляційних аналогів наведено в табл. 7.4.

Зауважимо, що в реляційної БД немає точних аналогів методів і параметрів класів та примірників класів, часових властивостей. З іншого боку, в реляційному виставі мають місце тригери, які не потрібні в об'єктному середовищі.

Екземплярам об'єктів відповідають записи, ідентифіковані за допомогою первинного ключа. Для збережених об'єктів як такого ключа можливо використовувати ідентифікатор ID об'єкта (приблизний аналог поля з типом даних "лічильник").

Спадкування в об'єктному поданні трансформується в набір вихідної і наследуемой таблиць.

За замовчуванням імена об'єктної властивості і реляційного поля однакові. Перейменування можливо за допомогою ключового слова SQLFIELDNAME у визначенні об'єктної властивості.

Об'єктні властивості-константи (атомарні осередки) можуть бути тимчасовими, багатовимірними і обчислюваними. Обчислювані властивості автоматично в таблицях не відображаються. У реляційній трактуванні для цього слід передбачити обчислювані поля. Останні можуть бути трансформовані в обчислювані властивості.

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

Посилання на збережені об'єкти здійснюються зовнішнім ключем.

Вбудовані об'єкти характеризуються складовим ім'ям поля з використанням символу підкреслення (<ім'я класу, в який вбудований об'єкт> _ <ім'я властивості>), т. E. Addres_Ulica.

Колекція-список відображається у вигляді окремого поля, що містить список значень.

Колекція-масив подається у вигляді окремої підтаблиці, пов'язаної з основною таблицею через зовнішній ключ. Ім'я підтаблиці той же складене: <ім'я класу> _ <ім'я колекції>.

Об'єктним запитам відповідають збережені процедури і види (View). Ключові слова - SQLPROC, SQLVIEW, SQLVIEWNAME.

Методи класу можуть бути відображені в коді у виді обчислюваних полів або у вигляді збережених процедур. Можуть використовуватися і тригери, що визначаються в об'єктному поданні на мові CDL або в рамках CACHE Object Architect.

Виділяють вкладений і вбудований мови SQL. Структура мови SQL2 (інтерфейсного і вкладеного) відображена в багатьох джерелах.

У зв'язку з цим акцентуємо увагу на відмінностях мови SQL в СУБД CACHE (CACHE SQL) від мови SQL2. Розширення вкладеного мови SQL2 має місце в наступних напрямках:

  • 1) додаткові оператори;
  • 2) об'єкт CURSOR;
  • 3) поля-списки;
  • 4) з'єднання (посилання, відносини залежності).
  • 1. Додатковими операторами є:

= * - Зовнішнє з'єднання;

-> - Неявне з'єднання;

_, # - Конкатенація (імен) і цілочисельний залишок від ділення (модуль);

  • ? - Оператор перевірки за шаблоном;
  • (- Оператор входження;

& - Оператор І;

! - Оператор АБО;

] - Оператор проходження за.

Можливе використання як одинарних, так і подвійних лапок; приставки not перед логічними операторами (not =, not <, not>).

2. На додаток до таких об'єктів, як таблиці, види, збережені процедури, індекси, обмеження, генератори, тригери, в рамках CACHE використовують об'єкт SQL2, що отримав назву CURSOR.

CURSOR - деякий набір даних, що формується найчастіше оператором select. Він містить кілька записів і відрізняється від збережених процедур, які тільки обчислюють набір даних, і виду, обчислюваного щоразу при запиті до нього. CURSOR обчислюється один раз і існує до моменту його знищення.

Покажемо процедуру створення курсора, забезпечивши її відповідними коментарями.

/ * Створення курсора * /

DECLARE PersCur CURSOR

FOR SELECT Familia, DateRogd

FROM Person

WHERE Familia-Петров '

/ * для оголошеного курсора можливо використовувати пропозиції OPEN, FETCH, CLOSE * /

OPEN PersCur

/ 'зчитування вмісту полів в локальні змінні, як у збережених процедурах * /

FETCH PersCur INTO: Familia,: DateRogd

/ * слід зазначити, що локальні змінні могли бути задані і при визначенні курсору * /

DECLARE PersCur CURSOR

FOR SELECT Familia, DateRogd INTO: Familia,: DateRogd

FROM Person

WHERE Familia = 'neTpoB'

/ * в цьому випадку оператор вилучення даних змінюється * / FETCH PersCur

/ * що не використовується курсор закривається * /

CLOSE PersCur

Результати запиту можуть зчитуватися і в індексовані змінні

FETCH PersCur INTO: а ('Результат запиту Т)

в даному випадку - в трирівневу змінну; в об'єкти, наприклад об'єкт з OREF = provider

FETCH PersCur INTO: Familia

Set provider.Familia = Familia.

Дані можуть бути вставлені в курсор (запит оператором INSERT) із змінних і індексованих змінних (як параметрів).

  • 1. Звернення до полів-списками розглядалося раніше.
  • 2. З'єднання можуть бути зовнішніми і неявними.

У зовнішньому з'єднанні (на відміну від внутрішнього) "сполучаються" поля першої таблиці відображаються навіть у тому випадку, якщо для поля в другій таблиці не знайдені відповідні рядки.

У зовнішньому з'єднанні CACHE в пропозиції WHERE замість символу = застосовується символ = *.

Неявне з'єднання визначається не запитом користувача, а підтримується БД. У неявних з'єднаннях виділяють посилання і відносини залежності.

У засланні поле посилається таблиці містить первинний ключ ID записи таблиці (покажчик), на яку вона посилається.

SELECT Name, Manufacturer -> Surname FROM Tovar

WHERE Туре = 'інструмент',

що відповідає

SELECT Tovar.Name, Manufacturer.Surname FROM Tovar, Manufacturer

WHERE Туре = "інструмент"

ANDTovar.Manufacturer = Manufacturer.lD.

Відношення залежності - відношення 1: M від батьківської до дочірньої таблиці. Кожен рядок дочірньої таблиці посилається на який-небудь рядок батьківської таблиці (варіант внутрішнього з'єднання). Це найчастіше відноситься до вбудованим об'єктам: нехай батьківська таблиця має ім'я Invoice, дочірня - Position, а посилання на неї - Invoice Position.

Виділяють два типи залежностей: від дочірньої таблиці до батьківської і від батьківської до дочірньої.

У першому випадку оператор

SELECT lnvoice-> Date

FROM lnvoice_Position

WHERE Price> 100000.

аналогічний

SELECT Invoice.Date

FROM lnvoice_Position, Invoice

WHERE Price> 100000

AND lnvoice_Position.lnvoice = lnvoice.ID.

У другому випадку оператору

SELECT 1nvoice_Position -> Price

FROM Invoice WHERE Price> 100000

AND lnvoiceNumber = 1003274

відповідає

SELECT lnvoice_Position_> Price

FROM Invoice, lnvoice_Position

WHERE Invoice.lnvoiceNumber = 1003274

AND Invoice.ID = lnvoice_Position.Invoice.

Під вбудованій мові SQL-оператори "вбудовуються" в програму мовою CACHE ObjectScript за допомогою препроцесорної функції & sql, наприклад

& sql (SELECT ID INTO: ID

FROM PERSON

WHERE Familia =: Familia)

Quit ..% Openld (ID).

В якості SQL-оператора можуть виступати оператори оновлення, створення об'єкту (CREATE) і описаний раніше CURSOR.

SQL-дані можуть мати такі формати: Logical (за замовчуванням), ODBC, Display (не відноситься до властивостей-константам і значенням змінних).

У вбудованому мові SQL можуть використовуватися і макровиклики, для яких прийняті позначення: # - препроцесор, ## або & - розширення програмного коду, $$$ - макровиклик по зробленому раніше Макроозначення.

Наприклад,

#define TABLE Person

#define FIELDS Familia, Telephon

#define VARS: Familia,: Telephon

#define COND Familia% STARTWITH "A"

& sql (SELECT $$$ FIELDS

INTO $$$ VARS

FROM $$$ TABLE

WHERE $$$ COND).

З іншого боку, макровизначеннями може застосовуватися для

додавання & sql:

#define GETNEXT & sql (FETCH xcur INTO: a)

FOR $$$ GETNEXT Quit: SQLCODE = 100 Do abc,

що еквівалентно

FOR & sql (FETCH xcur INTO: a)

Quit: SQLCODE = 100 Do abc.

Тут SQLCODE - змінна, що характеризує виконання & sql: 0 - успішно завершено; 100 - успішно завершено, але не знайдено для заданих умов жодного запису; менш нуля - є помилка.

На закінчення відзначимо, що найбільш зручно здійснювати SQL-доступ із зовнішніх систем, що дозволяє використовувати такі реляційні об'єкти, як звіти. Цей зовнішній реляційний доступ забезпечується сервером CACHE SQL і інтерфейсом ODBC.

Перспективи розвитку ООБД

У порівнянні з реляційними БД ООБД володіють наступними перевагами.

  • 1. Кращі можливості моделювання систем з блоків, що володіють довільними зв'язками.
  • 2. Легка розширюваність структури за рахунок створення нових типів даних (властивостей), спадкування, встановлення нових зв'язків і коригування методів.
  • 3. Можливість використання рекурсивних методів при навігаційному методі доступу до великих обсягів даних.
  • 4. Підвищення продуктивності в 10-30 разів.
  • 5. Більш широка сфера застосування (наприклад, використання в мультимедійних системах).

Переваги ООБД [3] приведуть, мабуть, до дуже широкого їх поширенню. Однак перш слід вирішити ряд завдань щодо усунення недоліків ООБД: створити гнучку структуру БД; побудувати чітку мову програмування; відпрацювати синтаксис розбору запитів, у тому числі - вкладених; визначити кілька методів доступу до даних; відпрацювати питання одночасного доступу (дозвіл конфліктів при множині спадщині); визначити складний перебір даних; відпрацювати захист і відновлення даних; уточнити семантику (дії) операторів при динамічних змінах; вбудувати зміна атрибутів дочірніх об'єктів.

Однак і після усунення названих недоліків перехід до ООБД носитиме, мабуть, еволюційний характер, оскільки відразу відмовитися від значної кількості діючих реляційних БД буде не можна. Такий безболісний перехід буде можливий, якщо спочатку в ООСУБД буде присутній не тільки об'єктна, а й реляційна складова. Більш того, в ООСУБД слід ввести і багатовимірну модель для формування сховищ даних, парадигма яких добре узгоджується з парадигмою ООБД. Саме такий підхід використаний в ООСУБД CACHE [38, 40].

 
Якщо Ви помітили помилку в тексті позначте слово та натисніть Shift + Enter
< Попередня   ЗМІСТ   Наступна >
 
Дисципліни
Агропромисловість
Аудит та Бухоблік
Банківська справа
БЖД
Географія
Документознавство
Екологія
Економіка
Етика та Естетика
Журналістика
Інвестування
Інформатика
Історія
Культурологія
Література
Логіка
Логістика
Маркетинг
Медицина
Нерухомість
Менеджмент
Педагогіка
Політологія
Політекономія
Право
Природознавство
Психологія
Релігієзнавство
Риторика
Соціологія
Статистика
Техніка
Страхова справа
Товарознавство
Туризм
Філософія
Фінанси
Пошук