Программирование >>  Реляционные базы данных 

1 ... 92 93 94 [ 95 ] 96 97 98 ... 125


6.5 Изменение ограничений 2S5

Упрожнение 6.4.4. Запишите следующие основанные на кортеже ограничения CHECK на схему РС :

a) Цена ПК со скоростью процессора менее 150 МГц не должна превышать 1500 шл.

b) Л К блокнот с размером экрана менее 11 дюймов должен иметь жесткий диск не менее I Гбайт или продаваться по цене ниже 2000 дол.

Упрожнение 6.4.5. Запишите в виде SQL-выражений перечисленные ниже ограничения, основанные на отношениях примера 4.1.3

CIasses(class. type, country, numGuns. bore, displacement) Ships(name. class, launched) Battles(name, date) Outcomes(ship, battle, result)

a) Ни один класс не может иметь более двух кораблей.

!Ь) Ни одна из стран не может иметь и линкоры, и крейсеры.

!с) Ни один корабль, имеющий более девяти орудий, не мог участвовать в одном сражении с кораблем, у которого меньше девяти орудий и который был потоплен в этом сражении.

!d) Ни один корабль не мог быть спущен на воду раньше корабля того же класса, носящего то же самое имя.

!е) Для каждого класса существует корабль с именем этого класса.

Упрожнение 6.4.6. Запишите следующие основанные на кортежах ограничения CHECK, касающиеся схемы линкоров :

a) Ни один класс кораблей не может иметь орудий калибра более 16 дюймов.

b) Если класс кораблей имеет более девяти орудий, их калибр не должен превышать 14 дюймов.

! с) Ни один корабль не может участвовать в сражении до его спуска на воду.

6.5 Изменение ограничений

Ограничения можно изменить или отменить в любое время. Способ выражения изменений зависит от того, с чем связано ограничение: с областью, атрибутом, таблицей или со схемой БД.

6.5.1 Присваивание имен ограничениям

Для изменения или отмены существующего ограничения необходимо, чтобы оно имело имя. Утверждениям, являющимся частью схемы БД, всегда присвоены имена в выражении CREATE ASSERTION. Чтобы присвоить имя любому другому ограничению, нужно поставить впереди ключевое слово CONSTRAINT и выбранное

имя.

Пример 6.S2. Имя можно присвоить даже ограничению по первичному или внешнему ключу. Например, переписать строку (2) рис. 6.1 и присвоить имя ограничению, согласно которому name является первичным ключом:

2) name CHAR(30) CONSTRAINT NamelsKey PRIMARY KEY.



Аншюгнчным способом прис заивается имя основанному ка атрибуте ограничению CHECK in примера ь.ь

4) gender CHAR(1) CONSTRA NT NoAndro

CHECK (gender IN (F. W)).

ограничению обпасти н; прнлгера 6.8:

CREATE DOMAIN CertDomaIn INT

CONSTRAINT SixDigtS CHECK (VALUE >= 100000)

И наконец- основанному иа кортеже ограничению CHECK имя присваивается заменой строки (6) рис. 6.4 строкой

6) CONSTRAINT RIghtTltle

CHECK (gender =F OR name NOT LIKE Ms.W) □

6.5-2 Изменение ограничений на таблицы

Изменить множество ограничений, связанных с областью, агрибутом или таб1г1ицей, можно с помошью оператора ALTER. Оператор ALTER TABLE применялся в разделе 5.7.4 для добавления и удаления атрибутов. Оператор ALTER DOMAIN применялся в разделе 5 7.6 для изменения значения по умолчанию

Эти операторы можно применять и для изменения ограничений. ALTER TABLE используется для изменения основанных на атрибуте и на кортеже ограничений CHECK. Ограничение можно отменить с помошью ключевого слова DROP и имени уда1яемого ограничения или же добавить с помощью ключевого слова ADD, за которым следует добавляемое ограничение.

Пример Й.13. Рассмотрим, как отменить и добавить ограничен кз примера 6.12. Ограничение, согласно которому name является первичным кпючом отношения MovieStar, отменяется предложением

ALTER TABLE MovieStar DROP CONSTRAINT NamelsKey;

Основанное на атрибуте ограничение CHECK на значения атрибута gender отменяется предложением

ALTER TABLE MovieStar DROP CONSTRAINT NoAndro;

Ограничение на отношение MovieStar, согласно которому Ms. относится только к кинозвездам женского пола, отменяется предложением

ALTER TABLE MovieStar DROP CONSTRAINT RIglitTltle;

Для восстановления этих ограничений нужно изменить схему отношения MovieStar. добавив к ней jtii же orpaHvr4eHHH. Например

ALTER TABLE MovieStar ADD CONSTRAINT NamelsKey

PRIMARY KEY (name), ALTER TABLE MovieStar ADD CONSTRAINT NoAndro

CHECK (gender IN ( -M)), ALTER TABLE MovieStar ADD CONSTRAINT RightTitle

CHECK (gender = F OR name NOT LIKE Ms.W)

Теперь они сталн opaничeння)lи CHECK, основанными на кортеже, а ие на атрибуте. Их нельзя вновь превратить в ограничения атрибутов, но если бы типами атрибутов быт области, можно бьшо бы отнести ограничения к этом областям, не изменяя таблицы MovieStar.



Присваивайте ограничениям имена

\ Желательно присвоить ограничению имя, лаке если вы полагаете, что I никогда не будете на него ссылаться. Если ограничение создано без имени, I а вам понадобилось его изменить, присваивать имя уже поздно. j

6-53 Изменения ограничений области

Удаление и добавление ограничений области проводится, по существу, так же, как удаление или добаачений основанных на кортеже ограничений CHECK. Для удаления применяется оператор ALTER, в котором за ключевым словом DROP следует имя ограничения. Для добавления ограничения области в оператор ALTER вносятся ключевое слово ADD, имя ограничения и условие CHECK, опреде.пяющее данное ограничение.

Пример 6.14. Офаничение, согласно которолту номер сертификата должен содержать не менее шести шфр, удаляется предложением

ALTER DOMAIN CertDomain DROP CONSTRAINT SixDigits; J

Восстановить это же ограничение можно с помощью предложения

ALTER DOMAIN CertDomain ADD CONSTRAINT SixDigits

CHECK (VALUE >= 100000); □

6.5.4 Изменение утверждений

Утверждение можно удалеть с помощью предложения, состоящего из ключевых СЛОЕ DROP ASSERTION, за которыми следует имя утверждения.

Пример 6.15. Утверждение из примера 6.10 удаляется предложением

DROP ASSERTION RichPres; Для восстановления ограничения нужно описать его снова, как в примере 6.10. □

6.5.5 Унралшения к разделу 6.5

Упражнение 6.5.1. Покажите, как изменить реляционные схемы

Movie(title, year, length, inColor, studioName, producerC#) Starsln(movieTitle, movieYear. starName) MovieStar(name, address, gender, birthdate) MovieExec(name, address, cert#, netWorth) Studio(nama, address, presC*)

Ммя вводимого заново ограничения выбирается произвольно, однако SQL не запоминает ог[5ан11чений, связанны.х с и. ; именами. Поэтому при добавлении прежнего ограничения е.го нужно писать заново и нельзя ссылаться на него только по имени. □



1 ... 92 93 94 [ 95 ] 96 97 98 ... 125

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика