КАТЕГОРИИ: Архитектура-(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) |
Особенности объединения БД
План: Рассказать о проблемах при объединении: потерянные записи в подчиненных таблицах, пропуски в значениях ключевых полей, необходимость реиндексации сливаемых данных, необходимость сохранения ссылочной целостности в сливаемых данных, необходимость в справочниках исключать дублирующие записи. Привести пример в виде заполненных таблиц и все проблемы показать.
--Пример объединения данных нескольктх кусков БД с исключением дублей и реиндексацией
--создание тестовой БД с данными для объединения и дубликатами в справочниках /* use master drop database db_teachers 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) On update cascade, 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(17, 'Федоров') insert into spteachers(idpost, FIO)Values(16, 'Капин') insert into spteachers(idpost, FIO)Values(16, 'Сорин')
create table sppost1(idpost int primary key, postname char(30)) create table spteachers1(idteacher int primary key identity (1,1), idpost int Foreign key references sppost1(idpost) On update cascade, FIO char(30))
insert into sppost1(idpost, postname)Values(2, 'математика') insert into sppost1(idpost, postname)Values(1, 'физика твердого тела') insert into sppost1(idpost, postname)Values(3, 'литература') insert into sppost1(idpost, postname)Values(4, 'черчение') insert into sppost1(idpost, postname)Values(16, 'механика') insert into sppost1(idpost, postname)Values(17, 'БД')
insert into spteachers1(idpost, FIO)Values(2, 'Иванов') insert into spteachers1(idpost, FIO)Values(1, 'Петров') insert into spteachers1(idpost, FIO)Values(1, 'Сидоров') insert into spteachers1(idpost, FIO)Values(17, 'Федоров') insert into spteachers1(idpost, FIO)Values(16, 'Капин') insert into spteachers1(idpost, FIO)Values(16, 'Сорин') */ --select * from sppost union select * from sppost1 use db_teachers --реиндексация 1 части Declare @temp1 table(idpost int) insert into @temp1 select idpost from sppost order by idpost asc
declare @i int, @id int set @i = 0 declare temp1 scroll cursor for (select idpost from @temp1) open temp1 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
--реиндексация 2 части Declare @temp2 table(idpost int) insert into @temp2 select idpost from sppost1 order by idpost asc
declare temp2 scroll cursor for (select idpost from @temp2) open temp2 set @i = ISNULL((select max(idpost) from sppost),0)
FETCH NEXT FROM temp2 into @id set @i = @i+1 update sppost1 set idpost = @i where idpost = @id
WHILE @@FETCH_STATUS = 0 BEGIN FETCH NEXT FROM temp2 into @id set @i = @i+1 update sppost1 set idpost = @i where idpost = @id END close temp2 DEALLOCATE temp2
--объединение таблиц declare @postname char(30) declare temp3 scroll cursor for (select idpost, postname from sppost1) open temp3 FETCH NEXT FROM temp3 into @id, @postname set @i = ISNULL((select idpost from sppost where sppost.postname=@postname), 0) if @i>0 begin update sppost1 set idpost = @i where idpost = @id end WHILE @@FETCH_STATUS = 0 BEGIN FETCH NEXT FROM temp3 into @id, @postname set @i = ISNULL((select idpost from sppost where sppost.postname=@postname), 0) if @i>0 update sppost1 set idpost = @i where idpost = @id else insert into sppost(idpost, postname)VALUES(@id, @postname) END close temp3 DEALLOCATE temp3
insert into spteachers(idpost, FIO) select idpost, FIO from spteachers1 select * from sppost select * from sppost1 select * from spteachers select * from spteachers1
Дата добавления: 2014-01-04; Просмотров: 420; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |