|
|
|
Подчиненные таблицы
|
|||
|---|---|---|---|
|
#18+
Уважаемые профи SQL! У меня возможно тривиальный вопрос: 1.есть таблица-мастер, ключ искусственный, создается генератором 2.есть подчиненные таблицы, связанные с мастер имхо по этому ключу 3.Запись в мастер таблице и записи в дочерних заносятся в рамках одной транзакции(т.е.кардинальные внешние ключи), и запись с конкретным значением ключа в мастер не может существовать без записей, ссылающихся на мастер-таблицу. Яркий пример: товарная накладная(шапка+перечень поступивших товаров) Как можно средствами IB проконтролировать, что в транзакции, если происходит вставка записи в мастер-таблицу, то должны быть вставки с данным ключом в подчиненные? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2004, 16:09:36 |
|
||
|
Подчиненные таблицы
|
|||
|---|---|---|---|
|
#18+
А что значит проконтролировать? И зачем это надо? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2004, 09:55:20 |
|
||
|
Подчиненные таблицы
|
|||
|---|---|---|---|
|
#18+
Варианты: 1. Вставляй записи в одной ХП, шансы что накроеться вставка "подчиненной"- минимальны. 2. Можно триггером - "Если вставка в главную - вставка в подчиненную строк по определ. условиям". 3. Доп. контроль на клиенте, Select Count() из мастера с нулевым кол-вом строк в подчиненном. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2004, 10:50:07 |
|
||
|
Подчиненные таблицы
|
|||
|---|---|---|---|
|
#18+
если вставка не происходит, значит был эксепшын. транзакция откатываешь и все само происходит как ты хотел зы. а что такое искуственный ключь и кардинальные внешние ключи?? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2004, 11:36:27 |
|
||
|
Подчиненные таблицы
|
|||
|---|---|---|---|
|
#18+
Для большей надёжности отними право INSERT у всех пользователей на эти две таблицы. И назнач это право INSERT своей ХП также на эти две таблицы. Таким образом, в обход логики этой процедуры никто не сможет напихать записей в таблицы напрямую. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2004, 11:56:59 |
|
||
|
Подчиненные таблицы
|
|||
|---|---|---|---|
|
#18+
Вопрос об использовании ХП упирается в проблему передачи нескольких строк для одной подчиненной таблицы. Или я не знаю каких-то возможностей? А контроль нужен для того, чтобы в Базе Данных не сохранились только шапки товарных накладных. А про триггерную реализацию примерчик мона? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2004, 16:09:35 |
|
||
|
Подчиненные таблицы
|
|||
|---|---|---|---|
|
#18+
а если организовать вызов 2-ой ХП из 1-ой по вставке в подчинённую таблицу и вызывать столько раз, сколько строк надо вставить, посчитать кол-во вставляемых строк можно ведь... а с триггерами, так создаёшь триггер AFTER или BEFORE INSERT на главную таблицу, а в теле триггера пишешь, что надо выполнить, но опять же если вставлять в подчинённую несколько записей, то надо знать их кол-во... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2004, 16:41:17 |
|
||
|
Подчиненные таблицы
|
|||
|---|---|---|---|
|
#18+
Извини, но количество видов товаров по накладной может быть разным и заранее неопределенным при приемке "по факту" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2004, 17:14:42 |
|
||
|
Подчиненные таблицы
|
|||
|---|---|---|---|
|
#18+
Извини, но количество видов товаров по накладной может быть разным и заранее неопределенным при приемке "по факту" то есть нельзя посчитать сколько товаров будет заноситься? странно... я бы сделал так: сначала формируешь типа таблицу пришедших товаров (ну там временная таблица или ещё чо нить в этом роде) потом считаешь кол-во позиций, ну а потом уже окончательная вставка в базу, где всё это и должно храниться (само собой очищаешь врямянку после этого)... короче создавай таблицу типа для предварительной обработки, если средствами сервера БД или на клиенте чо нить подобное организуй, типа кэш или буфер, как там правильно-то это назвать... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.04.2004, 10:25:16 |
|
||
|
Подчиненные таблицы
|
|||
|---|---|---|---|
|
#18+
Я делаю так. В master таблице существует поле DOC_STATE, которое может быть в трех состояния: 1 - Browse, 2 - Insert, 3 - Edit. Если DOC_STATE = 1, проверка в триггерах не осуществляется. После разнесения данных по подчиненным таблицам меняется DOC_STATE и выполняется проверка. Причем в подчиненных таблицах триггерами проверяется DOC_STATE. Если запись master таблицы не находится в состоянии редактирования или вставки, то ганериться исключение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.04.2004, 10:39:59 |
|
||
|
|

start [/forum/topic.php?fid=40&fpage=467&tid=1578456]: |
0ms |
get settings: |
9ms |
get forum list: |
10ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
56ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
32ms |
get tp. blocked users: |
1ms |
| others: | 190ms |
| total: | 313ms |

| 0 / 0 |
