КАТЕГОРИИ: Архитектура-(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
При удалении записи в родительской таблице возможны следующие варианты действий (табл. 2): Таблица 2
При добавлении новой записи в дочернюю таблицу или редактировании в ней существующей записи возможны следующие варианты действий (табл. 3):
Таблица 3
После завершения определения условий целостности данных нажмите кнопку ОК. В результате вся введенная вами информация будет сохранена в словаре базы данных. Теперь независимо от приложений при изменении, добавлении и удалении записей будут выполняться указанные действия, обеспечивающие целостность данных.
План: Типы БД, для которых может понадобиться реиндексация Возможности реиндексации: - Изменения типа ключевого поля в сторону увеличения разрядности - Алгоритм реиндексации, представленный ниже на примере двух связанных таблиц Справочник должностей и Справочник учителей: 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; Просмотров: 467; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |