|
Программирование >> Реляционные базы данных
Г ---- - J ; Воавка, удаление и д>бликаты I Рассмотрим, как вставки и удаления взаимосвязаны с дубликата* !, допу- { стимыми в отношениях SQL. Прежде всего вставка добавляет в отношение определенные кортежи независимо от того, содержались ли они в дапно.м отношении до вставки. Значит, если в Starsin уже есть кортеж для The Maltese Falcon и Sydney Greenstreet, в рез>льтате вставки, рассмотренной в примере 5.27, в данное отношение добавляется еще один экземпляр этого же кортежа. Если вслед за вставкоП применить удаление, рассмотренное в примере 5.29, оба кортежа будут удовлетворять условию пункта WHERE и поэтому оба будрт удалены. Неожиданным следствием последовательного применения вставки и удаления является то, что полученное отношение Starsin отличается от исходного отношения, к которому эти операции применялись. Кроме того, предложение удаления, казалось бы, описывающее удаление единственного кортежа, на самом деле удаляет несколько кортежей. Фактически в SQL вообще невозможно удалить только один из двух идентичных кортежей. 5.6.3 Операции обновления Хотя вставки и удаления кортежей можно в каком-то смысле считать обновлениями БД, обновление в SQL - это особый вид изменений БД: изменяются компоненты одного или более кортежей, существующих в БД, Общая форма предложения обновления: 1. Ключевое слово UPDATE 2. Имя отношения, например R 3. Ключевое слово SET 4. Список формул, каждая из которых устанавливает равенство атрибута отношения R со значением выражения или констатой 5. Ключевое слово WHERE 6. Условие Форма записи операции обновления: UPDATE R SET <приписывание новых значений> WHERE <условие> Каждое приписывание нового значения (пункт 4) состоит из атрибута, знака равенства и формулы. При наличии нескольких приписываний они разделяются запятыми. Данное предложение находит все кортежи отношения Д, удовлетворяющие условию (6). Затем каждый из них изменяется путем оценки формул пункта 4 и приписывания (юлученных значений компонентов кортежа для соответствующих атрибутов R. Притер 5.31. Изменим отношение MovieExec(name, address, cett#, netWorth) ставя префикс Pres. перед именем каждого продюсера, являющегося президентом студии. Условие, предъявляемое к нужным кортежам, состоит в том, что номера сертификатов таких продюсеров лолжны входить в компонент presC# некоторого кортежа из отношештя Studto. Это обновление представляется выражением: 1) UPDATE MovieExec 2) SET name = Pres name 3) WHERE cert# IN (SELECT presC# FROM Studio); Строка (3) проверяет, является ли номер сертификата из кортежа отношения MovieExec одним из номеров сезтификатов президентов в отношении Studio. Строка (2) выполняет обновление выбранных кортежей. Напомним, что оператор II означает конкатенацию строк, поэтому выражение, следующее за знаком = в строке (2), помещает строку Pres. и пробел перед старым значением компонента name данного кортежа. Новая строка становится значением этого компонента - Pres. стоит перед старым значением name. Q 5.6.4 Упражнения к разделу 5-6 Упражнение 5.6.1. Запишите перечисленные ниже обновления БД, основанные на схеме БД из упражнения 4.1.1 Product(msl r, model, type) PC(modef, speed, ram, hd, cd. price) Laptop(mode[ speed, ram hd. screen, price) Pnnter(modei, color, type, price) и опишите их результаты, используя данные этого упражнения. a) С помощью предложений INSERT введите в БД информацию о том. что ПК модели ] 100 сделан производителем С, имеет скорость 240, RAM 32, жесткий диск 2,5, диск 12х CD и цену 2499 дол. !Ь) Вставьте в БД информацию о том, что для каждого ПК есть ПК-блокнот, имеющий такую же скорость и RAM, диск 8х CD, при этом номер его моцели превышает номер ПК на 1100, а цена превышает иену ПК на 500 дол. c) Удалите ПК с жесткими дисками объемом менее 2 Гбайт. d) Удалите все ПК-блокноты, выпускаемые производ>1телями, которые не выпускают принтеры. e) Производитель А купил предприятие производителя В. Излгените продукты, выпушенные В, так, чтобы они стали продуктами А. О Измените объем RAM каждого ПК и добавьте к его жесткому диску объемом 1 Гбайт. !в) Добавьте один дюйм к размеру экрана каждого ПК блокнота, выпущенного производителем Е, и уменьшите его иену на 100 дол. Ипрожнение 5.6.2. Запишите перечисленные ниже обновления БД, основанные на схеме БД из упражнения 4.1.3 Classes(class, type, country, numGuns, bore/displacement) Shrps(name, class, launched) Battles(name, date) * Outcomes(ship, battle, result) H опишите их результаты, используя данные этого упражнения. *а) Два британских линкора класса Nelson - Nelson и Rodney , имевшие 16-дюймовые орудия и водоизмещение в 34 тыс тонн, были потоплены в 1927 г. Введите эту информацию в ВД. b) Дна из гре.ч итальянских линкоров класса Vittorio Vento - Vittorio Veiito и Italia - были потоплены в 1940 г; третий корабль этого класса - Roma -был потоплен в 1942 г. Каждый из них имел 15-люймовые орудия и [юдоизмещение в 41 тыс. тонн. Введите эту информацию в БД. 5.7 Определение схемы отношения в SQL Рассмотренные ранее аспекты SQL-запросы и изменения часто называют манипулированием данными. В этом разделе мы начнем рассматривать определения данных, т.е. фрагменты SQL, описывающие структуру информации в БД. Тема данного раздела - описание реляционных схем. Мы рассмотрим, как описывается новое отношение, называемое в SQL таблицей, а именно: имена атрибутов, типы данных для атрибутов и некоторые фиксированные типы ограничений, относящиеся к ключам. В разделе 5.8 будут рассмотрены пользовательские представления - виртуальные отношения, реально не хранящиеся в БД. Некоторые более сложные вопросы, касающиеся ограничений на отношения, будут рассмотрены в главе 6. 5.7.1 Типы данных Для начала введем основные типы данных, используемые в системах SQL. Тип данных должен иметь каждый атрибут. 1. Строка символов фиксированной или переменной длины. Тип CHAR{n) обозначает строку фиксированной длины с п символами. Если атрибут имеет тип CHAR{n), то в любом кортеже компонентом для этого атрибута должна быть строка длиной в п символов. VARCHAR(n) обозначает строку длиной до п символов включительно. Компонентами для атрибута этого типа являются строки длиной от О до л символов, В SQL допустима корректировка значений типов символьной строки. Обычно строка заполняется пробелами, если она становится значением компонента, являющегося строкой большей фиксированной длины. Например, если строка foo становится значением компонента для атрибута типа CHAR(5), она записывается как foo (за последней буквой следуют два пробела. При сравнении этого компонента с другой строкой пробелы можно не учитывать (см. раздел 5.1.3). 2. Битовые строки фиксированной или переменной длины. Они аналогичны строкам символов фиксированной и переменной длины, но их значениями являются строки битов, а не символов. Тип В1Т(п) означает битовые строки длины я, а тип BIT VARYlNG{n) - битовые строки длиной до п символов включительно. 3. Тип INT или INTEGER (это синонимы) обозначает обычные значения, выраженные целыми числами. Тип SHORTiNT тоже обозначает числа целые числа, количество допустимых битов при этом может быть меньше и зависит от конкретной реализации (аналогично случаю с типами Int и short int в языке С). 4. Числа с плавающей точкой могуг быть представлены различными способами. Для обычных таких чисел можно использовать типы FLOAT или REAL, а более высокой точности представления можно достичь с помощью типа DOUBLE PRECISION; разница меаду ними такая же, как в языке С. В SQL есть также тип реальных чисел с фиксированной десягичной точкой. *с) Удалите из отношения Ships все корабли, потопленные в сражении. *d) Измените отношение Classes так, чтобы калибры их орудий измерялись в сантиметрах (I дюйм = 2,5 см), а водоизмещение в метрических тоннах (I метрическая тонна = 1,1 тонны). е) Удалите классы, содержашие менее трех кораблей.
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки. |