
- •Новосибирская государственная академия экономики и управления
- •«Базы данных»
- •Преобразование объектных множеств и атрибутов
- •2. Преобразование моделей без ключей
- •3. Преобразование конкретизации и обобщений объектных множеств
- •4. Преобразование отношений
- •5. Преобразование составных объектных множеств
- •6. Преобразование рекурсивных отношений
- •7. Примеры преобразования: Консультационная Служба
- •8. Сопоставление концептуального и реляционного
8. Сопоставление концептуального и реляционного
моделирования данных
Начинающие разработчики БД, особенно имеющие некоторый опыт работы с реляционными СУБД, иногда спрашивают, зачем возиться с концептуальным моделированием, если мы все равно в конце концов собираемся реализовывать базу данных в реляционной модели? Зачем вообще создавать концептуальную модель? Почему не создавать сразу реляционную модель данных и пользоваться теорией нормализации для исключения возможных аномалий? Разве это не позволит сберечь время и энергию? Это важные вопросы, и на них необходимо ответить. Возможно, вы тоже задавались такими вопросами.
Ответ на все эти вопросы сконцентрирован в одном слове: сложность. Чем сложнее становится модель базы данных, тем труднее разобраться в ней и правильно спроектировать. Эта сложность растет с добавлением объектных множеств, конкретизации, составных объектов и отношений. Поскольку главное назначение базы данных состоит в обеспечении точной информацией менеджеров и руководителей, жизненно важно, чтобы структура базы данных была логичной и не имела изъянов. Так как человеку свойственно ошибаться, поэтому никакая методология моделирования не может полностью гарантировать точность модели данных, однако графический подход сильно повышает вероятность получения точных моделей по сравнению с текстовым подходом реляционного моделирования.
Мы проиллюстрируем это на примере. Рассмотрим реляционную модель счета консалтинговой фирмы, созданную выше на основе концептуальной модели рис. 13:
CLIENT (CLIENT-NAME, CLIENT-ADDRESS)
PROJECT (PROJECT-#, CLIENT-NAME/ PROJECT-TITLE,TOTAL-CHANGE, INVOICE-#, INVOICE-DATE)
Внешние ключи: CLIENT-NAME ссылается на CLIENT
CHANGE (CHANGE-#, PROJECT-# AMOUNT, DESCRIPTION)
Внешний ключ: PROJECT-# ссылается на PROJECT
CONSULTANT (CONSULTANT-NAME, RATE)
ENGAGED-IN-ACTIVITY-ON (CONSULTANT-NAME, ACTIVITY, PROJECT-#, HOURS, AMOUNT)
Внешние ключи:
CONSULTANT-NAME ссылается на CONSULTANT
PROJECT-# ссылается на PROJECT
Теперь предположим, что вы не имеете концептуальной модели рис. 13 и вообще ничего не знаете о концептуальном моделировании данных. Если бы вы были пользователем, впервые взглянувшим на приведенную выше реляционную схему, насколько легко вам было бы понять смысл таблицы ENGAGED-IN-ACTIVITY-ON (ЗАНЯТ-В-ВИДЕ-ДЕЯТЕЛЬНОСТИ-ДЛЯ)? Пользуясь ссылками внешних ключей, вы сначала нашли бы реляционную схему таблицы CONSULTANT. Затем вы нашли бы реляционную схему таблицы PROJECT. Наконец, взглянув на имя таблицы ENGAGED-INACTIVITY-ON и воспользовавшись тем фактом, что ACTIVITY (ВИД-ДЕЯТЕЛЬНОСТИ) является ключевым столбцом таблицы, вы бы проницательно заметили, что консультанты выполняют различные виды деятельности в разных проектах, и эта таблица фиксирует затраченное время и сумму оплаты.
Теперь посмотрим на рис. 13. Сколько времени вам понадобится, чтобы вывести ту же самую информацию из рисунка? Очевидно, для этого требуется всего несколько секунд анализа, так как информация представлена в значительно более наглядном графическом виде. Этот естественный эффект выражается в естественном языке через использование существительных (соответствующих объектным множествам) и глаголов (соответствующих отношениям). В концептуальной модели мы обозначаем существительные прямоугольниками, а глаголы — отрезками-отношениями, соединяющими прямоугольники. Визуальное представление упрощает понимание структуры.
В реляционной же модели единственными средствами, которыми мы располагаем, являются реляционные таблицы и внешние ключи, так что все объектные множества и отношения моделируются одинаковым образом. С одного взгляда на реляционную схему не так-то просто понять, какие таблицы представляют существительные (или объекты), а какие — глаголы (или отношения). Без помощи графики мы должны сами производить разделение существительное-глагол. В самом деле: картинка стоит тысячи слов. Анализируя реляционную модель, вы мысленно рисуете для себя картинку, которая связывает таблицы примерно так же, как это делает рис. 13. Таким образом, Для того чтобы понять реляционную модель, мы мысленно выполняем ту же работу, которая уже проделана в концептуальной модели.
А теперь представьте себе, что реляционная модель состоит не из пяти таблиц, а из тридцати, сорока или пятидесяти; теперь вам ясно, как сложно будет в ней разобраться без помощи графики. При создании такой схемы базы данных важно, чтобы все тонкости, присущие реальной ситуации, были точно зафиксированы. Не пользуясь концептуальной моделью, проектировщик базы данных сильно рискует допустить в проекте серьезные ошибки.
Теперь обсудим другой вопрос: зачем заниматься преобразованием в реляционную модель? Почему бы просто не реализовать концептуальную модель? Ответ на этот вопрос состоит в том, что огромное большинство СУБД основано на реляционной (или более ранней) модели. Объектно-ориентированные СУБД, которые могли бы напрямую реализовать концептуальную схему, еще, по общему мнению, не достигли «промышленной мощности», необходимой для больших приложений, и, следовательно, пока не могут использоваться. Кроме, того, для простой базы данных напрямую создать реляционную модель, возможно, не сложнее, чем создавать концептуальную модель. Таким образом, оба подхода вполне жизнеспособны и могут адекватно использоваться.