Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Подчиненные таблицы / 11 сообщений из 11, страница 1 из 1
11.04.2004, 16:09:36
    #32476794
Winni-Pooh
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подчиненные таблицы
Уважаемые профи SQL! У меня возможно тривиальный вопрос:
1.есть таблица-мастер, ключ искусственный, создается генератором
2.есть подчиненные таблицы, связанные с мастер имхо по этому ключу
3.Запись в мастер таблице и записи в дочерних заносятся в рамках одной транзакции(т.е.кардинальные внешние ключи), и запись с конкретным значением ключа в мастер не может существовать без записей, ссылающихся на мастер-таблицу.
Яркий пример: товарная накладная(шапка+перечень поступивших товаров)
Как можно средствами IB проконтролировать, что в транзакции, если происходит вставка записи в мастер-таблицу, то должны быть вставки с данным ключом в подчиненные?
...
Рейтинг: 0 / 0
12.04.2004, 09:55:20
    #32477120
Dik76
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подчиненные таблицы
А что значит проконтролировать? И зачем это надо?
...
Рейтинг: 0 / 0
12.04.2004, 10:50:07
    #32477209
Matt Juntunen
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подчиненные таблицы
Варианты:
1. Вставляй записи в одной ХП, шансы что накроеться вставка "подчиненной"- минимальны.
2. Можно триггером - "Если вставка в главную - вставка в подчиненную строк по определ. условиям".
3. Доп. контроль на клиенте, Select Count() из мастера с нулевым кол-вом строк в подчиненном.
...
Рейтинг: 0 / 0
12.04.2004, 11:36:27
    #32477278
dalai lamer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подчиненные таблицы
если вставка не происходит, значит был эксепшын. транзакция откатываешь и все само происходит как ты хотел



зы. а что такое искуственный ключь и кардинальные внешние ключи??
...
Рейтинг: 0 / 0
12.04.2004, 11:56:59
    #32477309
Zmeishe
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подчиненные таблицы
Для большей надёжности отними право INSERT у всех пользователей на эти две таблицы. И назнач это право INSERT своей ХП также на эти две таблицы.
Таким образом, в обход логики этой процедуры никто не сможет напихать записей в таблицы напрямую.
...
Рейтинг: 0 / 0
12.04.2004, 16:09:35
    #32477817
Winni-Pooh
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подчиненные таблицы
Вопрос об использовании ХП упирается в проблему передачи нескольких строк для одной подчиненной таблицы. Или я не знаю каких-то возможностей? А контроль нужен для того, чтобы в Базе Данных не сохранились только шапки товарных накладных. А про триггерную реализацию примерчик мона?
...
Рейтинг: 0 / 0
12.04.2004, 16:41:17
    #32477893
VF
VF
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подчиненные таблицы
а если организовать вызов 2-ой ХП из 1-ой по вставке в подчинённую таблицу и вызывать столько раз, сколько строк надо вставить, посчитать кол-во вставляемых строк можно ведь...

а с триггерами, так создаёшь триггер AFTER или BEFORE INSERT на главную таблицу, а в теле триггера пишешь, что надо выполнить, но опять же если вставлять в подчинённую несколько записей, то надо знать их кол-во...
...
Рейтинг: 0 / 0
12.04.2004, 17:14:42
    #32477983
Winni-Pooh
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подчиненные таблицы
Извини, но количество видов товаров по накладной может быть разным и заранее неопределенным при приемке "по факту"
...
Рейтинг: 0 / 0
14.04.2004, 10:25:16
    #32480398
VF
VF
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подчиненные таблицы
Извини, но количество видов товаров по накладной может быть разным и заранее неопределенным при приемке "по факту"
то есть нельзя посчитать сколько товаров будет заноситься? странно...
я бы сделал так: сначала формируешь типа таблицу пришедших товаров (ну там временная таблица или ещё чо нить в этом роде) потом считаешь кол-во позиций, ну а потом уже окончательная вставка в базу, где всё это и должно храниться (само собой очищаешь врямянку после этого)... короче создавай таблицу типа для предварительной обработки, если средствами сервера БД или на клиенте чо нить подобное организуй, типа кэш или буфер, как там правильно-то это назвать...
...
Рейтинг: 0 / 0
14.04.2004, 10:39:59
    #32480444
FreemanZAV
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подчиненные таблицы
Я делаю так. В master таблице существует поле DOC_STATE, которое может быть в трех состояния: 1 - Browse, 2 - Insert, 3 - Edit. Если DOC_STATE = 1, проверка в триггерах не осуществляется. После разнесения данных по подчиненным таблицам меняется DOC_STATE и выполняется проверка. Причем в подчиненных таблицах триггерами проверяется DOC_STATE. Если запись master таблицы не находится в состоянии редактирования или вставки, то ганериться исключение.
...
Рейтинг: 0 / 0
11.06.2004, 17:30:22
    #32558720
Winni-Pooh
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подчиненные таблицы
Реализовал так, как описывал FreemanZAV. Работает обалденно, не тормозит, и очень легко отыскивать разрушенные документы! СПАСИБО за гениальное решение!
...
Рейтинг: 0 / 0
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Подчиненные таблицы / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]