Теория и практика построения баз данных (1088289), страница 71
Текст из файла (страница 71)
Такая модификация структуры показана на рис.. 10.3, а. Имена суррогатных ключей образованы путем присоединения суффикса Ю к имени таблицы. Структура на рис. 10.3, и является более удачной, поскольку в ней дублируется меньшее количество данных. Столбцы Агйзгйагпе, Т!11е и Сору нет нужды копировать в таблицу Тгапзасйоп. Так как с одной и той же работой может выполняться большое количество транзакций, экономия может оказаться внушительной. На рис. 10.3, б представлена лиаграмма «сущггость — связь» для структуры с суррогатными ключами. Создание, чтение, обновление и удаление экземпляров представлений Предспгавлеяие (угету) — это структурированный список элементов данных из сущностей или семантических объектов, определенных в модели данных.
Экзелгпляр представления (у)ету гпзсапсе) — это представление, заполненное данными из конкретного экземпляра сущности или семантического объекта. На рпс. 10.4, а изображен пример представления для базы данных галереи, структура которой показана на рис. 10.2 и 10.3. Это представление содержит данные о клиенте, его Создание, чтение, обновление и удаление экземпляров представлений 337 !Ошгзакциях и интересах.
В этом представлении для каждого клиента потенци- ально имеется много транзакций, и каждая из транзакций относится к одной ра- б<по. Для одного и того же клиента может быть указано множество имен худож- !шков (это те художники, работами которых клиент интересуется). б Рис. 10.4. Представпение СОЯТОМЕЙ. а — структурированный список атрибутов; б — данные дпя примера Обратите внимание, что атрибут Аг1!зЕИагпе появляется в атом представлении дважды.
В первом случае это имя художника, работу которого приобрел клиент. Во втором случае это имя художника, произведениями которого данный клиент 338 Глава 10. Проектирование приложений баз данных Создание, чтение, обновление и удаление экземпляров представлений, 339 интересуется. В примере на рис. 10А, 6 клиент приобрел работы художников Тоои и Миро, но кроме этих авторов он также интересуется работами художника по имени Деннис Фрггнгс.
Поэтому фамилии Тобеу и МГго появляются в представлении по два раза: в первый раз как значения атрибута !ИОРК.АЙТ15Т.Иап<е, а во второй раз как значения атрибута АЙТ15Т.Иап<е. Напомним, что представление — это структурированный список атриоутов. Поскольку он является структурированным, атрибуты могут фигурировать в представлении неоднократно. Обратите внимание, кроме того, что представление является только списком значений элементов данных. Оно может быль форматировано пли материализовано множеством различных способов: в виде формы, отчета или какого-нибудь другого типа материализации.
Теперь посмотрим, что можно делать с представлением. Начнем с чтения. Чтение экземпляров представлений Чтобы прочитать существующее представление, приложение должно запустить адин или несколько $О1-операторов, считывающих значения элементов данных, и поместить результаты в структуру представления. Данные представления Ссзтоп<ег на рис.
10А были получены путем следования по схеме базы данных двумя путями: один — через таблицу ТЙАИ5АСТ1ОИ, а другой — через таблицу С05ТОМЕЙ АЙТ15Т 1ИТ. Структура 5ОТ -оггераторов такова, что один оператор позволяет проследовать через схему только одним путем. Такгллг образом, данное представление потребует отдельного 5ОГ.-отгератора для каждого пути.
Для первого пути необходимые данные о клиенте по имени Магу !асГ<зоп можно получить с помощью следующего оператора: 5ЕЕЕСТС05ТОМЕР.Ссзтоп'егГО, С05ТОМЕЙ.Иа<пе. С05ТОМЕР.ЯгеаСо<Ге. С05ТОМЕР.Еоса1ИапЬег. АЙТ15Т.Иагпе. ИОРК 111!е. ИОРК.Сору.ТРЯИ5ЯСТГОИ РсгсЬазеОате, ТРЯИ5ЯСТГОИ.5агегрггсе ЕЙОМС05ТОМЕЙ. ТЙАИ5ЯСТ10И, ИОРК, АРТГ5Т ИНЕЙЕС05ТОМЕТ,Ссзтопег10 = ТРАИ5АСТГОИ Ссз1оп<ег10 ЯИОИОРК.ИогКГО = ТЙАИ5ЯТ1ОИ Ко<К!О ЯИО ЯРТ!5Т,Агтгзт10 = ИОРК Яг11з110 АИОС05ТОМЕЙ Иапге = 'дасКзоп, Магу' Проанализируйте этот оператор, глядя на диаграмму связей на рнс.
!0.3, а. Чтобы получить данные по всем трем связям вверху диаграммы, необходимо выполнить три соединения. В контексте разработки приложений результат выполнения 5ОГ.-оператора называется иногда ггаборолг записей (гссог<Гзег). Согласно терминологии МГсгозо!ц этот термин означает отношение в ООП-оболочке. Набор записей имеет методы и свойства. В качестве примера метода можно назвать метод Ореп, примером свойства является свойство СсгзогТуре. Более подробно вы узнаете об этом пз главы 14. Чтобы узнать, работы каких авторов интересу<от клиента, требуется второй МЯГ.-оператор, который следует через таблицу С05ТОМЕЙ АЙТ15Т 1ИТ. Оператор имеет следующий вид: ',~!.ЕСТС05ТОМЕР.Ссзтовег!0, АЙТ15Т.Иагпе ! ЙОМС05ТОМЕЙ.
С05ТОМЕР ЯЙТ15Т-ГИТ. ЯЙТ15Т ИМГРЕС05ТОМЕР.Ссзгоэег10 = С05ТОМЕЙ АЙТ15Т 1ИТ.Сизтоп<ег!0 ЛИОС05ТОМЕЙ АЙТ15Т ГИТ.Ягтгз<!О = ЯЙТГ5Т.Яг<1з<10 ЯИОС05ТОМЕР.Иаие = 'ОасКзоп, Магу' Поскольку атрибут С05ТОМЕЙ.Иап<е не является уникальным, возможно, что дпа набора записей, полученные с помощью приведенных 5ОГ.-операторов, будут «глсржать данные более чем об одном клиенте. Следовательно, в приложении л<глжен быть код, проверяющий значения атрибута Ест!огне<10 в наборах записей и <.называющий между собой правильные строки.
После запуска приложение обладает всеми данными, необходимыми для построенияя одного или нескольких экземпляров представления, изображенного на рпс. ! 0.2 и ГОЗ. То, как конкретно это делается, зависит от используемого языка. !! языке СОВОЕ. данные будут помещены в структуры, определенные в разделе Оата 01ч!з1оп. В Ъ'Гзиа! Ва<йс данные могут быть помещены в структуру или несколько массивов.
В С-г+ плача данные помегцаются в объекты. Здесь мы не ипп,ресуемся этими вопросами. Цель скорее в том, чтобы вы почувствовали, каким образом гг!<<<ложен<<е должно запускать один или несколько ВЯТ--операторов для заполнения структуры данных представления. Пример на языке Гача будет прип<чген в главе 16. Создание новых экземпляров представлений '!тобы создать новый экземпляр представления, приложение должно сначала получить новые данные и связи.
Это чаще всего делается с помощью формы лля ввода данных, но приложения получают также данные от других программ и иными путями. В любом случае, после того как приложение получает новые шачения данных, оно запускает 5ОТ -операторы, сохраняющие эти значения в базе данньгх. Рассмотрим представление Иеп< Ссзтоп<ег на рис. !0.5.
Это представление ис<юльзуется каждый раз, когда новый клиент приобретает у галереи произведение. Оно содержит данные о клиенте, о транзакции и интересах этого клиента. От представ тения, изображенного на рис. 10А, данное представление отличается <см, что в пем содсргкптся больше данных о клиенте, а также тел<, что оно допускает только одну транзакцию. Однако атрибут АЙТ15Т.Иап<е может иметь несколько значений, отражающих интересы нового клиента. Пусть новые данные для этого представления находятся в программной струк- гуре под названием Меч<Сааб Предположим далее, что мы можем обращаться к значениям в структуре, указывая префикс ИегчСсзг перед имеггалги элементов структуры.
Так, ИегчСизбС05ТОМЕЙ.ИаГпе соответствует атрибуту Иапге таблицы С05ТОМЕЙ и структуре ИегчСизб 340 Глава 10. Проектирование приложений баз данных Создание, чтение, обновление и удаление экземпляров представлений 341 СОВТОМЕЙ,Магле СОВТОМЕЙ.Агеассие СОВТОМЕЙ.Соса)нипзьег СОВТОМЕЙ.Аиигевв СОВТОМЕЙ.СИу СОВТОМЕЙ.В!а!е СОВТОМЕЙ2)р ТЙАМВАСТ!ОМ.Ое!еАсцмгеи ТЙАМВАСТ)ОМ Асци(в(!!опрпсе ТЙАМВАСТ)ОМ.Ригсвавепа!е тйАМВАСТ)ОМ.Ва(еврпсе ЧЧОЙК.АЙТ(ВТ.Магпе ЧЧОЙК.Тще ЧЧОЙК.Сору АЙТ!ВТ.Мел!е... Рис. 10.8. Представление Мех Сив(сглег Чтобы записать это представление в базу ланных, мы должна! сохранить данные нового клиента в таблице С05ТОМЕй, сохранить данные новой транзакции в таблице ТКАМ5АСТ10М и созлать строку в таблице пересечения С05ТОМЕК АРТ15Т 1МТ для каждого из художников, работами которых интересуется клиент.
Данные клиента будут записаны следующим 5О[.-операторовс 1М5ЕЙТ 1МТО С05ТОМЕР (С05ТОМЕй.Маше, С05ТОМЕР.АгеаСо([е. С05ТОМЕР.Соса!МишЬег, С05ТОМЕР.АЬ([гевв. С05ТОМЕР.С(гу, С05ТОМЕР.5сате, С05ТОМЕР.21р) ЧАЕОЕ5(йехСиз[.С05ТОМЕЙ.Иаше МехСизЬ.С05ТОМЕЙ.АгеаСьбе, МехСивЕ.С05ТОМЕР.Еоса[йишЬег, МехСи5Ь.С05ТОМЕЙ.А([![гевв, МехСивГ.С05ТОМЕЙ.СТЬу. МехСигб С05ТОМЕР.5[а!е.
МехСизт.С05ТОМЕР.Е(р) Допустим, что при создании новой строки СУБД присваивает суррогатному ключу С05ТОМЕР.Сиз[оп)ег[0 значение. Это значение потребуется нам для того, чтобы завершить создание нового экземпляра представления, и олин из способов его получить — запустить следующий 5ОТ -оператор: ЗЕЕЕСТ С05ТОМЕР.Сигсошег[0, С05ТОМЕР.ЯгеаСо([е, С05ТОМЕР.Соса!МишЬег ( РОМ С05ТОМЕР ИПЕКЕ С05ТОМЕЙ.Маге = МехСив[.С05ТОМЕР.Маше Поскольку атрибут С05ТОМЕР.Мапзе не является уникальным, в наборе записей может оказаться более одной строки.
В этом случае нужно будет найти правильную строку по номеру телефона. Прелположим, что прн необходимости это было сделано, и под именем МевгСив!.С05ТОМЕК.Сиз!о!пег[0 в программную структуру было записано правильное значение. Для сохранения данных о транзакции также булет использоваться оператор 1М5ЕРТ. Олнако при этом надо будет указать значения внешних ключей ТЙАМ5АСТ[ОМ.ЧЧогй10 и ТКАМ5АСТ[ОМ.Сиз!вше![0.
Мы уже показали, как получить .щачеппе атрибута Сиз!оп)ег[0, и теперь осталось только получить значение атрибута Чуогй[0. Эту задачу выполнит следующий 5Я[.-оператор: 5ЕЕЕСТ ИОРК.ИогК[0 ЕйОМ ИОРК, АРТ15Т ИНЕРЕ ИОРК.Ягс!в![0 = ЯЙТ[5Т.Аг[1вс[0 ЯИО АЙТ15Т.Маше = МехСивЬ.ИОРК.АЙТ!5Т.Маше ЯМО ИОРК.Т)!!е = МехСизЬ.ИОРК.Т!Г)е АМО ИОРК.Сору = МехСиз(.ИОРК.
Сору Пусть возвращенное значение суррогапгого ключа сохранено под именем МехСив[.)МОРКЛЧогй[0. Для добавления новой строки в таблицу ТКАМ5АСТ10М можно запустить следующий 50[.-оператор: !М5ЕЙТ 1МТО ТЙАМ5АСТ10М (ТРАМ5АСТ10М.Иогй10. ГРАМ5ЯСТ10М.ОасеЯсцеп ге([, ,РАМ5ЯСТ10й Асцспз111опрг)се. ТЙАМ5ЯСТ[ОМ,РигспавеОа[е. ТРАМ5АСТ10М Сиз!Ьшег[0. ТРЯМ5ЯСТ[ОМ 5а!евршсе) ЧАЕОЕ5 (МехСивг ТРАМ5АСТ!ОМ,Иогй[0, МехСивЬ.ТйЯМ5АСТ[ОМ.Оа1еЯсцш ге![.
МехСивЬ.ТРАМ5ЯСТ!ОМ.Асцизв111опрг1се. МехСизг.ТРАИ5ЯСТ[ОМ.РигспазеОаЬе, МехСивЕ.ТРЯМ5АСТ[ОМ.Сигбошег[0, МехСивТ.ТРЯМ5АСТ[ОМ.5а1еврг1се) Теперь осталось только создать строки в таблице пересечения С05ТОМЕЙ АЙТ15Т 1МТ. Для этого нам нужно получить атрибут Аг[[в[10 кажлого художника, работами которого интересуется клиент, и затем создать новую строку в таблице пересечения. Эту логику иллюстрирует следующий фрагмент псевдокода: Рог еасййехСиз[.АЙТ!5Т,Маше 5ЕЕЕСТ ЯРТ!5Т.Аг[!зс[0 342 Глава 10.