проектування каталогу

  1. Важлива частина будь-якого інформаційного проекту - це представлення даних, зокрема, формування каталогу....
  2. Представлення каталогу в базі даних
  3. висновок
  4. література
Важлива частина будь-якого інформаційного проекту - це представлення даних, зокрема, формування каталогу. Сьогодні з'являється велика кількість систем, основним завданням яких є каталогізація даних, причому в кожній з них закладені свої принципи формування каталогу, методи реалізації яких часто унікальні і представляють собою «ноу-хау» розробників. У статті розповідається про один з методів створення каталогу даних, який може бути цікавий тим, хто вперше зіткнувся з такою проблемою. Наводиться приклад проектування Internet-каталогу, а також розбираються основні прийоми роботи з ним засобами СУБД Oracle.

Перед людиною часто в тому чи іншому вигляді постає завдання визначення порядку в хаосі навколишнього світу, пошуку властивостей і закономірностей в поведінці предметів (об'єктів). Інша, не менш важливе завдання, - класифікація об'єктів шляхом їх об'єднання по схожості властивостей, поведінки, будовою в якісь класи або категорії, з подальшим побудовою з них ієрархічно залежною структури [1]. Завдяки цьому картина світу стає більш чіткою і розуміється. Наприклад, в біології - це царство, потім, в порядку уточнення, тип (відділ), клас, загін (порядок), сімейство, рід і, нарешті, вид. Місце кожного організму в цій структурі визначається на підставі зовнішньої та внутрішньої будови тіла. Важливою задачею, тепер уже для розробників інформаційних систем, є створення програмного еквівалента подібної структури, з якої було б зручно і ефективно працювати.

Сьогодні з'являється велика кількість таких систем, основним завданням яких є класифікація (каталогізація) даних: каталог інформаційних ресурсів Мережі, електронна бібліотека, Internet-магазин, законодавча база даних і т.п. У кожній з них закладені свої принципи формування каталогу, методи реалізації яких є «ноу-хау» розробників. Розглянемо один з методів створення каталогу даних, який, можливо, і не унікальний, але цікавий і доступний для тих, хто вперше зіткнувся з такою проблемою.

Принципи побудови каталогу

В основі будь-якого каталогу лежать три сутності: тематичні розділи (категорії), що утворюють ієрархічно залежну структуру; зв'язку, які існують між окремими тематичними розділами; об'єкти даної області, що належать відповідним розділах.

Об'єкти - будь-які предмети названі області, що володіють певними властивостями, поведінкою і т.п. Наприклад, якщо мова йде про класифікацію Internet-ресурсів, то об'єктами можна вважати сайти, присвячені тій чи іншій темі, яка в даному випадку є його властивістю: скажімо, www.gov.ru - органи державної влади; www.culture.ru - новини культури і мистецтва; www.movies.ru - кінофільми; www.itar-tass.com - Інформаційне телеграфне агентство Росії.

Все що володіють загальними властивостями об'єкти можна виділити в групу. Об'єкти всередині цієї групи можна розділити на підгрупи, що визначаються іншими властивостями, ще більш конкретизують об'єкт. Таким чином, можна виділяти підгрупи аж до повного вичерпання відомих властивостей об'єктів або до потрібного рівня конкретизації (абстракції). Тематичний розділ - це якийсь рівень абстракції, що класифікує об'єкт, а сукупність тематичних розділів утворює ієрархічну систему. На рис. 1 наведено приклад простої ієрархічної структури Web-ресурсів.

На самому верхньому рівні ієрархії знаходиться розділ «Інтернет», який в даному випадку є розглянутої областю. Він містить такі розділи, як «Культура», «Політика», «ЗМІ». Ті, в свою чергу, містять інші підрозділи і т.д.

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

Деякі групи об'єктів можуть бути за змістом пов'язані з іншими групами, що знаходяться на інших гілках ієрархії. Як це видно з рис. 1, такими зв'язками можуть володіти підрозділи «Політика» і «Культура» розділу «ЗМІ», які утворюють смислові зв'язки з розділами «Політика» і «Культура». На рис. 2 ці зв'язки вказані у вигляді посилань на відповідні розділи «ЗМІ».

Іншими словами, всі об'єкти, що належать, наприклад, розділу «Інтернет / ЗМІ / Інформаційні агентства / Політика», можуть бути віднесені в віртуальний підрозділ «Політичні новини» розділу «Інтернет / Політика».

Основні атрибути, якими повинні володіти зв'язку, - це ідентифікатор розділу, що містить об'єкти; ідентифікатор розділу, до якого прив'язують ці об'єкти і псевдонім віртуального підрозділу.

Крім опису зв'язків між розділами може виникнути необхідність описати зв'язки між окремими об'єктами і розділами. Наприклад, в розділі «Інтернет / ЗМІ / Інформаційні агентства» може знаходитися сайт інформаційного агентства, який висвітлює події як політики, так і культури. Було б бажано, щоб цей сайт був також видно з розділу «Інтернет / Політика", не прив'язуючи до нього цілий розділ «Інформаційні агентства». Для опису такого зв'язку ( «розділ-об'єкт») можна визначити нову сутність з атрибутами: ідентифікатор розділу, до якого потрібно прив'язати даний об'єкт і ідентифікатор цього об'єкта.

Представлення каталогу в базі даних

Визначивши три основні сутності каталогу і його атрибути, ми тим самим визначили три таблиці бази даних і відносини між ними [2]. На прикладі проектування Web-каталогу, схема бази даних в нотациях UML [3] буде мати вигляд, представлений на рис. 3.

Схема описує три типи таблиць.

  • OBJECTS - таблиця, яка містить об'єкти: id - ідентифікатор об'єкта; category_id - ідентифікатор розділу, до якого належить об'єкт; title - назва об'єкта; url - адреса в Internet; description - опис об'єкта.
  • CATEGORIES - таблиця, яка містить тематичні розділи: category_id - ідентифікатор тематичного розділу; parent_id - ідентифікатор батьківського розділу; title - назва розділу; description - опис розділу.
  • LINKS - таблиця, яка містить опис зв'язків між тематичними розділами: id - ідентифікатор зв'язку; source_id - ідентифікатор розділу-джерела; destination_id - ідентифікатор розділу, що містить посилання на джерело; alias - псевдонім посилання.

Мовою SQL ці таблиці з усіма обмеженнями цілісності створюються наступними командами [4]:

Мовою SQL ці таблиці з усіма обмеженнями цілісності створюються наступними командами [4]:

Основна ідея побудови дерева укладена у відповідній структурі таблиці CATEGORIES, в якій є два поля: category_id і parent_id. Перше містить унікальний ідентифікатор тематичного розділу, а друге ідентифікатор батьківського розділу, до якого належить даний розділ ( Таблиця 1 ). Причому одному і тому ж батьківського розділу може належати як завгодно багато дочірніх розділів.

Припустимо, таблиця LINKS виглядає, як зазначено на таблиці 2 , А OBJECTS - як зазначено на таблиці 3 .

Для наочності розглянемо деякі приклади SQL-запитів з використанням синтаксису Oracle 9i. Додавання таких конструкцій як START WITH і CONNECT BY в пропозицію SELECT дозволяє робити різні вибірки в каталозі одним запитом, позбавляючи розробників писати громіздкі процедури, що зберігаються. Ці конструкції є внутрішнім стандартом Oracle, але реалізація показаних далі запитів можлива і для інших СУБД, в яких є можливість використання процедурного мови запитів.

Приклад 1. Висновок заданої гілки каталогу зверху вниз SELECT category_id, parent_id, title FROM categories START WITH category_id = 4 CONNECT BY PRIOR category_id = parent_id;

Конструкція START WITH вказує, з якого розділу слід почати рух по дереву, CONNECT BY пов'язує номери розділів поля category_id, з відповідними номерами розділів поля parent_id. PRIOR, що стоїть перед category_id, вказує на те, що поле category_id ідентифікує тематичні розділи.

Результатом запиту буде висновок заданої гілки каталогу, починаючи з розділу? ЗМІ? і закінчуючи всіма її підрозділами ( таблиця 4 ).

Приклад 2. Висновок заданої гілки каталогу від низу до верху SELECT category_id, parent_id, title FROM categories START WITH category_id = 5 CONNECT BY category_id = PRIOR parent_id;

У цьому запиті PRIOR стоїть перед parent_id. Це означає, що поле parent_id ідентифікує тематичні розділи, а поле category_id навпаки ніби стає посиланням на батьківський розділ. Завдяки цьому, рух по дереву буде здійснюватися від низу до верху. Результатом запиту буде висновок гілки каталогу, починаючи з розділу? Музика? закінчуючи самим верхнім розділом? Інтернет? ( таблиця 5 ).

висновок

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

література
  1. Г. Буч, "Об'єктно-орієнтований аналіз та проектування з прикладами додатків на C ++", 2-е видання. "Невський діалект", 1998.
  2. К. Дж. Дейт, "Введення в системи баз даних", 7-е видання. "Вільямс", 2001
  3. Г. Буч, Д. Рамбо, А. Джекобсон, "Мова UML. Керівництво користувача". ДМК, 2000.
  4. Д. Грофф, П. Вайнберг, "SQL: повне керівництво", 2-е видання. "BHV-Київ" діалект ", 2001

C Максимом Рябенко (МФТІ) можна зв'язатися по електронній пошті за адресою [email protected] .

Результатом запиту буде висновок заданої гілки каталогу, починаючи з розділу?
ЗМІ?
Результатом запиту буде висновок гілки каталогу, починаючи з розділу?
Музика?
? закінчуючи самим верхнім розділом?
Інтернет?