Update constraints (child)
Релиб
Форумы       Участники    Календарь    Кто он-лайн?
Добро пожаловать, гость ( Вход | Регистрация )
        



Update constraints (child) Expand / Collapse
Автор
Сообщение
19.12.2001 17:46
Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

участник
Last Login: 01.06.2003 18:26
Сообщ.: 263, Visits: 2 905
Ситуация следующая:
есть таблица с расчетными счетами предприятия, многие таблицы используют ее по ИД счета. Несколько раз в год эта таблица перестраивается из R3, т.к. R3 отвечает за эту предметную области. Мне необходимо после изменения таблицы со счетами в связанных таблицах изменять ИД счетов, если они их поменяли в базовой. Связанных таблиц много и записей в них по несколко сот тысяч. Что будет работать быстрее Update или Delete c Insert. БД работает под ораклом.
Сообщ. #737156
20.12.2001 7:34
новичок

новичокновичокновичокновичокновичокновичокновичокновичок

участник
Last Login: 20.12.2001 14:37
Сообщ.: 8, Visits: 89
Я так понимаю, что если ты задаешь этот вопрос, то в таблице установлено каскадное правило обновления дочерних таблиц.
Зачем же тогда мучиться и писать сложные запросы?. Ведь эти немеренные тысячи сот связанных записей при удалении родительской надо где-то запомнить. Я не думаю что это будет быстрее.
Сообщ. #737195
20.12.2001 8:30
Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

участник
Last Login: 01.06.2003 18:26
Сообщ.: 263, Visits: 2 905
вот именно, что никакого каскадного обновления нет (плохой стиль проектирования БД), связи между документами определяются в хмл описании, при закачке которого, строится таблица со взаимосвязанными полями, т.е. несколько полей: реквизиты документов использующие реквизиты справочников. Поэтому нетрудно вытащить завязанные на эту сущность связанные таблицы. Можно написать функцию на динамическом PL\SQL, которая будет сравнивать записи существующей таблицы счетов и полученной из R3, и будет делать Update выбранным полям завязанных таблиц. Мне интересно знать, что будет быстрее работать: Update или Delete c Insert (список остальных полей из докуменов тоже можно выдернуть из хмл описания в БД, если сначала удалять запись и потом втыкать ее с новом ИДом счета). В некоторых таблицах на поле ИДа счета стоит индекс.
Сообщ. #737199
20.12.2001 8:59
новичок

новичокновичокновичокновичокновичокновичокновичокновичок

участник
Last Login: 20.12.2001 14:37
Сообщ.: 8, Visits: 89
Я бы не стал судить о каскадном обновлении как об однозначно плохом стиле проектирования. Оно существует как раз для таких случаев. И потом, все хорошо когда в меру.
Что же касается твоей дилеммы, то я думаю так: Вставка нового значения в индексируемое поле (это происходит при операциях Isert and Update) сама по себе долгая процедура, поэтому, если ограничения целостности позволяют, то лучше пользоваться операцией Update, не задумываясь над другими вариантами.
Сообщ. #737200
26.12.2001 18:17
Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

участник
Last Login: 18.03.2003 10:55
Сообщ.: 83, Visits: 914
А не проще менять ID в "новой" таблице на "старые" значения ?
Или иметь таблицу соответствия между "новыми" и "старыми" ID ? И не думать о быстродействии.
Хотя, если операция происходит 1 раз в год и занимает менее 4 - х часов (половина рабочего дня) то вопрос переходит в чисто теоретическое русло.
Сообщ. #737782
« пред. тема | след. тема »


Эту тему читают Expand / Collapse
Посетители: 0 (0 гостей, 0 участников, 0 скрыт.участников)
Сейчас нет участников, просматривающих тему.
Модераторы: Alexey, boombastik, bazile, pl

Время GMT +3:00, Сейчас 2:49