Теория и практика построения баз данных (1088289), страница 104
Текст из файла (страница 104)
шествующими значениями Аг!те!10. Такое нежелательно, поэтому этот флажок следует установить. Теперь, если мы не установим ни оЛин из двух расположенных ниже флажков, 5ЯЕ 5егуег просто запретит любое обновление илп вставку, которые нарушают данное ограничение ссылочной целостности, Чуть позже мы выгодно воспользуемся этим. В связи, которую мы создаем, участвует таблица пересечения. Если удаляется строка из таблицы АРТ15Т, нам нужно, чтобы соответствующие строки в таблице пересечения также удалялись. Следовательно, мы устанавливаем флажок Сазсабе Ое!еТе Йе!а1еб Ресотдз (Каскадное удаление связанных записей).
Тем самым мы предписываем 5Яь 5егуег при удалении строки из таблицы АРТ15Т удалять все связанные с ней строки в таблице пересечения. Это вызывает то же действие, что и 5ЯЕ-предложение ОМ ОЕСЕТЕ СА5САОЕ, описанное в главе 12. В нашей структуре используются суррогатные ключи, и, следовательно, изменение значений ключей невозможно. Поэтому нам нет нужды беспокоиться о каскадном обновлении связанных записей (флажок Сазсаде Орт)аТе Йе!агеб Ресотбз), Значения ключей обновляться не могут, Аналогичным образом можно определить связь между таблицами С05ТОМЕЙ и С05ТОМЕР АЙТ15Т 1МТ. Установите для нее флажки ЕпЕотсе те!а!!опз!т!р Еот1М5ЕРТз апс! 0РОАТЕз и Сазсат!е Ое!еТе Ре!а!еб Йесогс!з. Теперь рассмотрим связи между таблицами АЙТ15Т и !МОЙР, )МОЙР и ТРАМ5, а также С05ТОМЕР и ТРАМ5.
Ни для одной из этих связей не нужны каскадные удаления. Вместо этого следует запретить любые удаления, которые могут вызвать нарушение ссылочной целостности. Если, например, кто-нибудь попытается удалить строку в таблице тУОЙК, у которой имеется дочерняя строка в таблице ТРАМ5, не следует допускать такого удаления, Для этого в диалоговом окне свойств связи (РторетТ!ез ь Йе!аттоле!т!рз) установите флажок Ел!отсе те!а!!опвй!р Тот 1М5ЕЙТз апс! 0РОАТЕз, но не устанавливайте флажок Сазсаде Ое!еТе Ре!атеб Ресотбз. Все связи, имеющиеся в нашей базе данных, перечислены в табл.
13.2. Рис. 13.13. Схема базы данных гпев Пвве Представления саялньяв 1 Гвяв л 5ЕСЕСТ* ГлОНЕхрепв1чедгс1'всногК 482 Глава 13. Работа с базами данных в о()С Яегчег 2000 Окончательный вид диаграммы связей изображен на рис. 13.13. Свойства любой связи можно определить, щелкнув правой кнопкой мыши на линии, представляющей эту связь. Если вы еше не прочли раздел главы 12, посвященный представлениям, сделайте это.
Приведенные там общие замечания справедливы и для представлений, соз- данных в ЯО(. 5егчег. Создание представлений Создавать представления можно с помощью операторов 5Я1 или с помошъю графических средств проектирования 5ЯЕ Зегчег, Эти два способа показаны в таблицах на рис. 13.14 и 13.15 соответственно.
Представление, определенное на этих рисунках, называется Ехрепв)чеАг(111- 'ггогК. Оно соединяет данные из таблиц АкТ15Т, я(0йК и ТкАИ5 и затем выбирает строки, в которых значение столбца Асг(ввй(опРпсе превышает 10 000. Из созданного таким образом представления пользователь может получить данные с помощью следуя>щего ЯО1.-оператора: Пользователю не придется выполнять соединение таблиц, на которых основывается это представление; более того, ему даже не нужно будет знать о том, что такое соединение было произведено. Заметьте, кстати, что на рис. 13.14 перед именем каждой таблицы указан префикс 4Ьо. Причина этого состоит в следующем.
По умолчанию имени каждой Создание базы данных 80С Яегчег 483 таблицьг предшествует имя пользователя. Если в ссылке на таблицу имя пользователя отсутствует, 5Я) Яегчег автоматически присоединяет к ссылке пмя пользователя, которъгй инициирует запрос.
Так, если пользователь 3обп, зарегистрированный в 5Я( 5егчег, ссылается на таблицу С05Т, ЯЯ1. 5егчег будет искать таблицу с именем 3ойп.С05Т. Но если тот же самый 3ойп ссылается на таблицу 4Ьо.С05Т, 5О(. Зегчег будет искать таблицу с именем 4Ьо.С05Т, а не 3ойп.С05Т.
вн мв жег т в чллвн н Ъ 5в.вял '." ~. ве~~~в~л-::-»'::,:: -:~Гв".,',=='Ч:вео епгвз.:::,."в Рис. 13.14. Создание представления с помощью ВОС В операторе СКЕАТЕ ч1Етг на рнс. 13.14 префикс бЬо добавлен ко всем ссылкам на таблицы, так что этот оператор доступен и лля других пользователей помимо 4Ьо. Для пользователя бЬо все эти префиксы являются излишними, посколъку они в любом случае были бы добавлены 5О1 Вегчег . Но когда данный оператор запускает пользователь 3обп, присутствие префикса бЬо гарантирует, что ВЯ1 Бегчег будет обращаться к таблицам, владельцем которых является бЬо, а не сам 3ойп. Поскольку к имени представления Ехрепз(чеАгбв(я(огК имя пользователя не присоединено, то в результате запроса, инициированного бЬо, будет создано представление с именем 4Ьо.
Ехрепв)чеАг(1111гогК. Если этот же запрос инипиирует пользователь Зойп, то будет создано представление с именем ЗоЬп.Ехрепв1чеАг(УгогК, Это будут лва разных представления. Данные в них будут одинаковы, так как они основываются на одних и тех же таблицах, но тем не менее, представлений будет лва, и имена их будут различны. Чтобы создать представление с помощъю графических средств, в Епсегрггве Мапаяег щелкните правой кнопкой мыши на значке Ч1егчв (Представления) и выберите команду йечг Ч)егч (Новое представление).
Затем щелкните правой кнопкой мыши на пустой верхней панели и выберите команду Абб ТаЬ(е (Добавить таблицу). Чтобы создать представление, изображенное на рис. 13.15, лобавъте таблипы АкТ15Т, 'чгбкК и ТкАй5. Поставьте галочки напротив имен столбцов Агбз(йагпе, ТШе, Индексы Л о Т РНИ. 484 Глава 13. Работа с базами данных в ЯС]С Яепгег 2000 Сору и Асс[о]5[1[опРпсе. В третьей панели напротив Асдо[5[гсопРпсе в столбце Спгепа (Критерии) укажите критерий 10000. После того как вы это сделаете, 5Я[.
Зегчег покажет код соответствующего 5Я(.-запроса в четвертой панели. Щелкните на красном восклицательном знаке в панели инструментов, и 5О[ Яегттег заполнит представление вашими данными, как показано в последней панели на рис. 13.15, Я Е[] Б МО 101][П '[ Ь[С Ъ' ' К Ох[[[Ос[О: ~-;-:,;~'"а [''>';;;,",РТ А ИСЧооо АЙПЕТ Т!Ао [исйк] СРРТ [исжк] ' Р Асс ймаРасо ТЙАм5, А ...,,, >!СОСО :: ОЯ!"ЙЙ!к яйтст Еь мтйт ]аьйтн °, вчой.[исйк]всм, ем.[воск],сстм, Еы.тйивзмвммийй» РЙОМ ЕЬО АЙТ!5Т 1МТСЕй 101М ям[ИСАА] ОМ ОЬо АЙТ!ЕТМОМЮ Ви[ЮОРК]отойй Ой!ЕЙ ТОВС свапЙАм5 Ом оьй[исйк]поотиО вто,тййм5.иммт РАЕЙЕ ОВО,ТАМ!5.АСО ММООРОСО > 10000! мо к тоЬот мтсос Роыс с!со госао я мойтаьот мтсьс>оь с 10!СО 6' ' Рис. 13.13.
Создание представления с помощью графических средств проектирования Обновляемые представления Олни представления можно использовать для обновления данных, а другие— нет. Указать условия, которые делают представление обновляемым, трудно. Вообще говоря, любое представление, основывающееся на одной таблице, может быть использовано для обновления и удаления, если оно не содержит встроенных функций (например, СО[][[Т или МАХ) и вычисляемых столбцов в предложении 5ЕСЕСТ. Такое представление попускает и вставку данных, если оно включает в себя все ненулевые столбцы таблицы.
В противном случае вставка невозможна. Представления, основывающиеся на соединениях, более сложны. В 5Я[. Зегчег представление, имеющее более одной таблицы в предложении Р[[ОМ, не может использоваться лля удаления. Многотабличные прелставления допускают вставку и обновление, если эти операции производятся только над одной из таблиц, входящих в представление, и опять-таки в предположении, что представление не имеет встроенных функций или производных столбцов в предложении 5ЕСЕСТ. Создание базы данных ОС]С Яептег 488 Наконец, представления, которые иначе невозможно обновить, можно слелать обновляемыми, если создать замещающий триггер для операции обновления.
Такой триггер представляет собой процедуру, написанную на ТТСАНВАСТ-ЗЯ[, которая выполняет операции вставки, обновления или улаления вместо БО[. Вегчег. Мы рассмотрим это более подробно, когда будем обсуждать триггеры. Индексы, как уже говорилось, — это специальные структуры данных, созлаваемые лля повышения производительности базы данных (см, приложение А).
ЯЯ[- Яегчег автоматически создает индексы по всем первичным и внешним ключам. Разработчик может также с помощью Я)С Яегчег созлавать индексы и по другим столбцам, которые часто фигурируют в предложениях 11][НЕ[[С или используются для сортировки данных при последовательной обработке таблицы для запросов и отчетов. Чтобы создать индекс, щелкните правой кнопкой мыши на таблице, содержащей столбец, который вы хотите индексировать, выберите Ай Таз[СЕ (Все задачи), затем выберите Мапаое 1пт[ехез (Управление индексами). Откроется диалоговое окно, изображенное в левой части рис.
13.16. Щелкните на кнопке [т[еит... (Новый...), и перед вами появится диалоговое окно, изображенное в правой части рис. 13.1б. На этом рисунке разработчик создает инлекс по столбцу Бр таблицы С[]5ТОМЕй. Инлекс, который называется С[]5ТОМЕй 1[р 1п[[ех, должен быть заполнен на 80;а и отнесен к группе файлов Рй1МАЙУ. Перегрузка оставляет пространство в индексе открытым Лля вставок на всех уровнях, исключая самый нижний. Заполнение характеризует объем пустого пространства, оставляемого на нижнем уровне индекса. За дальнейшей информацией об этих параметрах обращайтесь к приложению А и к документации на ВО[. Зегчег.
Рис. 13.16. Создание индекса в графическом режиме Логика приложения 487 Рис. 1ЗЛ7. ВОЬ-код, создающий индекс 'ассу ск в ось утсь тттв кувс увьс ху ссс у ьстс Кссссвв с ьу нсуьс Кспнв х т ь у а', ?Нвсх т ь у 'ф':!.'Хвсх т ьву ': 'Гзай у н ус Логика приложения ', Е а~дзюь т' ':.'" 'всн ',4 Рис. 1 3.18. Пример хранимого запроса 486 Глава 13. Работа с базами данных в 5С?С Яептег 2000 В последнем диалоговом окне щелкните на кнопке Ег!!1501...
(Редактировать 5Я? ...), и вы увидите лиалоговое окно, изображенное на рис. 13.17. Оно будет содержать текст 5Я?.-оператора, введя который в окне анализатора запросов, можно было бы создать тот же самый индекс. 5Я? Бегуег поддерживает два вида индексов: кластеризованные и некластеризованные. В кластеризованном индексе данные хранятся на нижнем уровне и в том же порядке, что и сам индекс. В некластеризованном индексе нижний уровень не содержит данных, но содержит указатели на данные. Поскольку строки могут быть отсортированы только в одном физическом порядке за один раз, для каждой таблицы допускается только один кластеризованный индекс.