-
Здравствуйте! Имеется таблица с несколькими десятками тысяч записей, назовем ее "родительская". Из нее берутся некоторые записи и добавляются в другую таблицу, назовем ее "дочерняя". Вопрос: можно ли сделать так, чтобы в родительской таблице скрывались записи которые уже добавлены в дочернюю? Если можно то каким образом это сделать?
-
глупо данные которые можно держать в одной таблице разносить на две ... еще более глупо на три, и т.д.
просто сделать поле признак по которому и выбирать, с этим признаком по одному значению типа отдельная таблица. (можно сделать вьюшку, типа материализовать виртуальное) так, одним полем, получишь кучу "виртуальных" таблиц не меняя структуры базы. и переносов не требуется, просто меняеш значение поля признака и запись "кочует" между таблицами.
-
родительская таблица принадлежит другой программе, и не допускается внесение изменений в структуру. Дочерняя таблица уже принадлежит моей программе. Вот я и хочу сделать чтобы при добавлении в дочернюю таблицу из родительской в ней не было уже добавленных записей.
-
а создавать каждый раз вьюшку при добавлении новой записи в дочернюю не практично, т.к. на это будет уходить время...
-
> [3] d@nger (22.12.09 08:15)
А зачем делать вьюху если обе таблицы, как я понял, постоянно доступны для запроса с объединением?
-
> родительская таблица принадлежит другой программе, и не допускается внесение изменений в структуру.
и как тогда влиять на "родительскую" делая записи "скрытыми"? все одно все сведется к дополнительному полю уже признаку видимости/невидимости. и которая должна будет учитываться всеми заинтересованными в этом запросами... гораздо больше "телодвижений" в общем.
(потому и глупо - больше обработок, меньше эффективность, неудобней работать, меньше в итоге скорость)
> а создавать каждый раз вьюшку при добавлении новой записи
какая запись? таблица! она нужна только как визуальная замена твоей таблице (видел ее в структуре и радовался...), да и то, только для того кто не может пользоваться where в запросах.
-
> постоянно доступны для запроса с объединением?
кстати да, раз уж нельзя трогать "родительскую" заведи свою без записей, только со ссылкой на ее ключ...
будет как бы образ без записей, такое "окно" на родителя, нужно добавить какую то добавляй ключ, не нужно удаляй, не трогая основных записей. во вьюшке (запрос данных) делай объединение. и все.
-
Я так понял, ты хочешь сделать так: добавил в свою из родительской, то в просмотре родительской она должна "исчезнуть"? тогда select * from parent p where not exists (select id from child c where c.id=p.id) для SelectSQL "родительского" датасета
-
> Виталий Панасенко (22.12.09 09:48) [7]
спасибо... вот это я и спрашивал... попробую..
-
> select * from parent p where not exists (select id from
> child c where c.id=p.id)
Медленновато будет.
select
p.*
from
parent p
,child c
where
c.id (+) = p.id
and c.id is null
Так шустрее, но при росте объемов тоже начнет притормаживать.
Лучше все таки :
1) добавить поле в парент и повесить на него индекс
2) удалять скопированные данные
-
> попробую..
чо то не получается... может быть из за того что обе эти таблицы находятся в разных базах данных... и как быть в таком случае?
-
обе эти таблицы находятся в разных базах данных
рано ты раскололся. надо было недельку подержать это в секрете
-
> [10] d@nger (22.12.09 12:35)
Не знаю как в ИБ6, в ФБ есть такая штука, как внешние таблицы. Можно попробовать наладить экспорт/импорт через них.
Или объединить все в одной БД. Аккуратно.
-
вобщем это не так просто как я думал.. пока сделаю просто предупреждение, что эта запись уже содержится в дочерней таблице... спасибо за ответы..
-
да что там сложного?
> sniknik © (22.12.09 09:28) [6]
ответил...при попытке добавить запись с аналогичным ключом получаем KEY VIOLATION, который и обрабатываем в except....Будь хоть в какой БД (твоей или чужой) данные...а вот фильтровать действительно сложноватисто.. особенно, если НД большой...