Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Возможности реиндексации в БД

Поддержание ссылочной целостности данных в СУБД на примере СУБД VFP

Правила

Правила позволяют вызывать выполнение заданных действий при определенных изменениях базы данных. Обычно действие - это вызов процедуры. Правила ассоциируются с таблицами и срабатывают при изменении этих таблиц.

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

Как и в случае ограничений, проверка правил отключается при массовых операциях копирования. Администратор базы данных может также явным образом отменить проверку правил, воспользовавшись оператором

 

SET NORULES;

Оператор

 

SET RULES;

позволит затем восстановить работу механизма правил. По умолчанию этот механизм включен.

Для удаления правил служит оператор

DROP RULE правило;

СУБД обеспечивает автоматическое удаление правил в тех случаях, когда удаляется соответствующая таблица. Тем самым поддерживается целостность системы таблиц и правил.

В контексте информационной безопасности важно отметить, что создать правило, ассоциируемое с таблицей, может владелец этой таблицы, имеющий право на выполнение соответствующей процедуры. Пользователь, действия которого вызывают срабатывание правила, должен обладать лишь необходимыми правами доступа к таблице. Тем самым правила неявно расширяют привилегии пользователей. Подобные расширения нуждаются в строгом административном контроле, поскольку даже незначительное изменение правила или ассоциированной процедуры может кардинально повлиять на защищенность данных. Ошибка же в сложной системе правил вообще чревата непредсказуемыми последствиями.

 

Установленные связи между таблицами могут быть использованы для задания условий целостности данных. Целостность данных является одним из самых важных требований, предъявляемых к базам данных.

Для определения условия целостности данных в окне конструктора баз данных выберите команду контекстного меню Edit Referential Integrity или соответствующую ей кнопку панели инструментов «Database Designer» (рис. 16).

Рис. Содержание всплывающего меню в Database Designer.

В результате откроется окно конструктора условий целостности данных «Referential Integrity Builder» (след. рис.), которое содержит перечень всех установленных отношений между таблицами. Таблица описания условий содержит наименования родительской и дочерней таблиц, наименования индексов, используемых для связи, а также типы действий, выполняемых при модификации данных, добавлении и удалении записей.

Рис. Окно «Referential Integrity Builder»

для определения условия ссылочной целостности.

 

В верхней части окна диалога отображается краткая справка о возможном выборе действий и три переключателя, предназначенных для установки типа выполняемого действия.

При изменении значения первичного ключа или ключа-кандидата в родительской таблице возможны варианты действий, представленные в таблице 1:

Таблица 1

Наименование Описание
Cascade   При изменении значений полей первичного ключа или ключа-кандидата в родительской таблице, автоматически осуществляется каскадное изменение всех соответствующих значений в дочерней таблице. Например, если это правило применить к отношению между таблицами Staff и Paies, при изменении кода сотрудника в таблице Staff автоматически будут изменены коды и в таблице Paies.
Restrict   Не позволяет изменять значения полей первичного ключа или ключа-кандидата в родительской таблице, если в дочерней таблице имеется хотя бы одна запись, содержащая ссылку на изменяемую запись. Данное правило также можно применить к отношению между таблицами Staff и Paies, если в создаваемом приложении коды сотрудника определяются на этапе ввода нового сотрудника и в дальнейшем не редактируются.
Ignore   Позволяет изменять значения полей первичного ключа или ключа-кандидата в родительской таблице, независимо от существования связанных записей в дочерней таблице. Целостность данных при этом не поддерживается.

 

При удалении записи в родительской таблице возможны следующие варианты действий (табл. 2):

Таблица 2

Наименование Описание
Cascade При удалении записи в родительской таблице автоматически осуществляется каскадное удаление всех записей из дочерней таблицы, связанных с удаляемой записью. Данное правило целесообразно применять к отношению между таблицами Staff и Paies.
Restrict Не позволяет удалять записи в родительской таблице, если в дочерней таблице имеется хотя бы одна запись, содержащая ссылку на удаляемую запись. При попытке удаления записи возникает ошибка, которую вы можете обработать программно. Если данное правило применить к отношению между таблицами Staff и Paies, вы можете быть уверены в том, что удаление записей в таблице Staff не приведет к нарушению целостности данных.
Ignore Позволяет удалять записи в родительской таблице независимо от существования связанных записей в дочерней таблице. Очевидно, что целостность данных при этом не поддерживается.

 

При добавлении новой записи в дочернюю таблицу или редактировании в ней существующей записи возможны следующие варианты действий (табл. 3):

 

Таблица 3

Наименование Описание
Restrict He позволяет вводить запись, если значение индексного выражения дочерней таблицы не соответствует ни одной из записей родительской таблицы. Данное правило вы можете применять к отношению между таблицами Staff и Paies.
Ignore При вводе данных в дочернюю таблицу не анализируется содержимое индексного выражения. Целостность данных при этом не поддерживается.

 

После завершения определения условий целостности данных нажмите кнопку ОК. В результате вся введенная вами информация будет сохранена в словаре базы данных. Теперь независимо от приложений при изменении, добавлении и удалении записей будут выполняться указанные действия, обеспечивающие целостность данных.

 

 

 

План:

Типы БД, для которых может понадобиться реиндексация

Возможности реиндексации:

- Изменения типа ключевого поля в сторону увеличения разрядности

- Алгоритм реиндексации, представленный ниже на примере двух связанных таблиц Справочник должностей и Справочник учителей:

1) проверить наличие потерянных записей в подчиненной таблице

2) проверить наличие каскадного обновления у связи или сделать его

3) во временную таблицу переместить список отсортированных ключей

4) в цикле заменить старое значение ключа на новое

 

--Создание тестовой БД

create database db_teachers

use db_teachers

 

create table sppost(idpost int primary key, postname char(30))

 

--возможные варианты создания связанной таблицы

--с соединением

create table spteachers(idteacher int primary key identity (1,1),

idpost int Foreign key references sppost(idpost), FIO char(30))

 

--с соединением и каскадным обновлением

create table spteachers(idteacher int primary key identity (1,1),

idpost int Foreign key references sppost(idpost) On update cascade, FIO char(30))

 

--без соединения

create table spteachers(idteacher int primary key identity (1,1),

idpost int, FIO char(30))

 

--ввод тетовых данных

insert into sppost(idpost, postname)Values(20, 'матем')

insert into sppost(idpost, postname)Values(10, 'физика')

insert into sppost(idpost, postname)Values(30, 'литер')

insert into sppost(idpost, postname)Values(15, 'черчение')

insert into sppost(idpost, postname)Values(16, 'механика')

insert into sppost(idpost, postname)Values(17, 'БД')

 

insert into spteachers(idpost, FIO)Values(20, 'Иванов')

insert into spteachers(idpost, FIO)Values(10, 'Петров')

insert into spteachers(idpost, FIO)Values(10, 'Сидоров')

insert into spteachers(idpost, FIO)Values(18, 'Федоров')

insert into spteachers(idpost, FIO)Values(16, 'Капин')

insert into spteachers(idpost, FIO)Values(16, 'Сорин')

 

--просмотр данных на предмет потерянных записей

--select * from spteachers left join sppost on spteachers.idpost=sppost.idpost

 

--удаление потерянных записей

--delete from spteachers where not exists(select * from sppost where spteachers.idpost=sppost.idpost)

 

--изменение связи

alter table spteachers drop constraint fk_teac_post

alter table spteachers add constraint fk_teac_post foreign key (idpost) references sppost(idpost) on update cascade

 

--создание временной таблицы

Declare @temp0 table(idpost int)

insert into @temp0 select idpost from sppost order by idpost asc

declare temp1 scroll cursor for (select idpost from @temp0)

open temp1

declare @i int, @id int

set @i = 0

 

--реиндексация

WHILE @@FETCH_STATUS = 0

BEGIN

FETCH NEXT FROM temp1 into @id

set @i = @i+1

update sppost set idpost = @i where idpost = @id

END

close temp1

DEALLOCATE temp1

 

--просмотр результата

select * from sppost

select * from spteachers left join sppost on spteachers.idpost=sppost.idpost

 

<== предыдущая лекция | следующая лекция ==>
Ограничения | 
Поделиться с друзьями:


Дата добавления: 2013-12-11; Просмотров: 417; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.028 сек.