|
Программирование >> Sql: полное руководство
для явного указания на то, что создается столбец. С учетом этого предыдущий пример можно записать так: Добавить в таблицу products столбец с данными о минимально допустимом количестве товара на складе. ALTER TABLE PRODUCTS ADD COLUMN MIN QTY INTEGER NOT NULL WITH DEFAULT 0 Удаление столбца С помощью инструкции alter table МОЖНО удзлить из Существующей таблицы один или несколько столбцов, если в них больше нет необходимости. Вот пример удаления столбца HiRE DATE из таблицы salesreps: Удалить столбец из таблицы salesreps. ALTER TABLE SALESREPS DROP HIRE DATE Стандарт SQL2 требует, чтобы одна инструкция alter table использовалась для удаления только одного столбца, но в ряде ведущих СУБД такое офаничение снято. Следует учитывать, что операция удаления столбца вызьшает те же проблемы целостности данных, которые были описаны в главе 11 на примере обновления таблиц. В частности, при удалении столбца, являющегося первичным ключом в каком-либо отношении, связанные с ним внешние ключи становится недействительными. Похожая проблема возникает, когда удаляется столбец, участвующий в проверке Офаничения на значения другого столбца. Описанные проблемы в стандарте SQL2 решены так же, как и в случае инсфукций delete и update, - с ПОМОЩЬЮ правила удаления. Можно выбрать одно из двух правил: restrict: если с удаляемым столбцом связан какой-либо объект в базе данных (внешний ключ, офаничение и т.п.), инсфукция alter table завершится выдачей сообшения об ошибке и столбец не будет удален; cascade: любой объект базы данных (внешний ключ, офаничение и т.п.), связанный с удаляемым столбцом, также будет удален. Правило cascade может вызвать целую лавину изменений, поэтому применять его следует с осторожностью. Лучше указывать правило restrict, а связанные внешние ключи или Офаничения обрабатывать с помощью дополнительных инСфукций типа alter или drop. Изменение первичных и внешних ключей Еще одним распросфаненным случаем применения инструкции alter table является изменение или добавление определений первичных и внешних ключей таблицы. Так как поддержка первичных и внешних ключей включена во многие новые реляционные СУБД, данная форма инструкции alter table является особенно полезной. С ее помощью можно информировать СУБД о межтабличных связях, уже существующих в базе данных, но не определенных явно. Используя инсфукцию alter table, Определения первичного и внешних ключей (в отличие от определений столбцов) можно как добавлять в таблицу, так и удалять из нее. Предложения, добавляющие определения первичного и внешнего ключей, являются точно такими же, как в инсфукции create table, и выполняют те же функции. Предложения, удаляющие первичный или внешний ключи, являются довольно простыми, как видно из приведенных ниже примеров. Отметим, что удалить внешний ключ можно только тогда, когда создаваемая им связь имеет имя. Если имя присвоено не было, то задать эту связь в инструкции alter table невозможно. В этом случае для удаления внешнего ключа необходимо удалить таблицу и воссоздать ее в новом формате. Вот пример, где в существующую таблицу добавляется определение внешнего ключа: Сделать столбец region таблицы offices внешним ключом для вновь созданной таблицы regions, первичным ключом которой является название региона. alter table offices add constraint inregion foreign key (region) references regions Ниже дан пример инструкции alter table, модифицирующей первичный ключ. Обратите внимание на то, что внешний ключ, соответствующий исходному первичному ключу, должен быть удален, так как он больше не является внешним ключом для изменяемой таблицы: Изменить первичный ключ таблицы offices. alter table salesreps drop constraint worksin foreign key (rep office) references offices alter table offices drop primary key (office) Определение ограничений Основу базы данных составляют таблицы, и в самых первых коммерческих реляционных СУБД они бьши единственным структурным элементом базы данных. С появлением первичных и внешних ключей вначале в DB2, а затем и в стандарте SQL2 понятие структуры базы данных было расширено и включило в себя отношения между таблицами. Не так давно, в соответствии со стандартом SQL2 и эволюцией коммерческих СУБД, в структуру базы данных вошел новый элемент - ограничения, накладываемые на данные, которые могут быть введены в базу данных. Типы офаничений и решаемые с их помощью проблемы целостности данных рассматривались в главе 11. Четыре типа офаничений (офаничения на первичный и внешний ключи, условие уникальности и условие на значения) можно считать однотабличными. Они задаются как часть инструкции create table и могут быть модифицированы или удалены с помощью инсфукции alter table. Двз других типа офаничений - утверждения и Домены - создаются как отдельные объекты в базе данных, не зависящие от определения какой бы то ни было таблицы. Утверждения Утверждение накладывает ограничение на содержимое всей базы данных. Как и условие на значения, утверждение задается в виде условия отбора, однако может ограничивать содержимое нескольких таблиц По этой причине утверждение задается как часть определения всей базы данных с помощью инструкции create assertion (стандарт SQL2). Предположим, вы хотите наложить на содержимое базы данных следующее ограничение: сумма заказов любого клиента не должна превышать его лимит кредита. Это офаничение можно реализовать посредством такой инсфукции: create assertion credlimit check {(customers.cust num = orders.cust) and (sum (amount) <= credit limit)) Если это утверждение (названное credlimit) является частью определения базы данных, то СУБД проверяет его справедливость всякий раз, когда какая-либо инсфукция SQL пытается модифицировать таблицу customers или orders. Если впоследствии вы решите, что утверждение больше не нужно, то сможете удалить его с помощью инсгрукции drop assertion: drop assertion credlimit В SQL2 нет инструкции alter assertion. Если вы хотите изменить определение утверждения, вам придется удалить его и создать заново с помощью инсфукции create assertion. Домены в стандарте SQL2 формальное определение домена реализовано как часть определения базы данных. Согласно этому стандарту, домен является именованной совокупностью значений, используемой в базе данных как дополнительный тип данных. Домен создается посредством инсфукции create domain. После создания домена на него можно ссылаться внутри определения таблицы как на тип данных Ниже показана инструкция create domain, создающая домен valid empl ids, который определяет диапазон допустимых идентификаторов служащих в учебной базе данных. Идентификатор служащего представляет собой целое число в диапазоне от 101 до 199. create domain valid empl ids integer check (value between 101 and 199) Если домен больше не нужен, его можно удалить с помощью инструкции DROP DOMAIN: drop domain valid empl ids cascade drop domain valid empl ids restrict Правила удаления cascade и restrict здесь имеют тот же смысл, что и при удалении столбцов таблицы. Если указано правило cascade, то любой столбец, принадлежащий удаляемому домену, также будет удален Если указано правило restrict, то попытка удалить домен, с которым связан хотя бы один столбец, завершится неуспешно. В этом случае вам придется сначала удалить или изменить
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |