Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2011.06.26;
Скачать: [xml.tar.bz2];

Вниз

2 таблицы Firebird   Найти похожие ветки 

 
d@nger   (2009-12-22 07:43) [0]

Здравствуйте! Имеется таблица с несколькими десятками тысяч записей, назовем ее "родительская". Из нее берутся некоторые записи и добавляются в другую таблицу, назовем ее "дочерняя". Вопрос: можно ли сделать так, чтобы в родительской таблице скрывались записи которые уже добавлены в дочернюю? Если можно то каким образом это сделать?


 
sniknik ©   (2009-12-22 07:59) [1]

глупо данные которые можно держать в одной таблице разносить на две ... еще более глупо на три, и т.д.
просто сделать поле признак по которому и выбирать, с этим признаком по одному значению типа отдельная таблица. (можно сделать вьюшку, типа материализовать виртуальное) так, одним полем, получишь кучу "виртуальных" таблиц не меняя структуры базы. и переносов не требуется, просто меняеш значение поля признака и запись "кочует" между таблицами.


 
d@nger   (2009-12-22 08:10) [2]

родительская таблица принадлежит другой программе, и не допускается внесение изменений в структуру. Дочерняя таблица уже принадлежит моей программе. Вот я и хочу сделать чтобы при добавлении в дочернюю таблицу из родительской в ней не было уже добавленных записей.


 
d@nger   (2009-12-22 08:15) [3]

а создавать каждый раз вьюшку при добавлении новой записи в дочернюю не практично, т.к. на это будет уходить время...


 
Sergey13 ©   (2009-12-22 09:21) [4]

> [3] d@nger   (22.12.09 08:15)

А зачем делать вьюху если обе таблицы, как я понял, постоянно доступны для запроса с объединением?


 
sniknik ©   (2009-12-22 09:23) [5]

> родительская таблица принадлежит другой программе, и не допускается внесение изменений в структуру.
и как тогда влиять на "родительскую" делая записи "скрытыми"? все одно все сведется к дополнительному полю уже признаку видимости/невидимости. и которая должна будет учитываться всеми заинтересованными в этом запросами... гораздо больше "телодвижений" в общем.
(потому и глупо - больше обработок, меньше эффективность, неудобней работать, меньше в итоге скорость)

> а создавать каждый раз вьюшку при добавлении новой записи
какая запись? таблица! она нужна только как визуальная замена твоей таблице (видел ее в структуре и радовался...), да и то, только для того кто не может пользоваться where в запросах.


 
sniknik ©   (2009-12-22 09:28) [6]

> постоянно доступны для запроса с объединением?
кстати да, раз уж нельзя трогать "родительскую" заведи свою без записей, только со ссылкой на ее ключ...
будет как бы образ без записей, такое "окно" на родителя, нужно добавить какую то добавляй ключ, не нужно удаляй, не трогая основных записей. во вьюшке (запрос данных)  делай объединение. и все.


 
Виталий Панасенко   (2009-12-22 09:48) [7]

Я так понял, ты хочешь сделать так: добавил в свою из родительской, то в просмотре родительской она должна "исчезнуть"? тогда select * from parent p where not exists (select id from child c where c.id=p.id) для SelectSQL "родительского" датасета


 
d@nger   (2009-12-22 11:13) [8]


> Виталий Панасенко   (22.12.09 09:48) [7]

спасибо... вот это я и спрашивал... попробую..


 
ANB   (2009-12-22 12:27) [9]


> 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) удалять скопированные данные


 
d@nger   (2009-12-22 12:35) [10]


> попробую..


чо то не получается... может быть из за того что обе эти таблицы находятся в разных базах данных... и как быть в таком случае?


 
Медвежонок Пятачок ©   (2009-12-22 12:53) [11]

обе эти таблицы находятся в разных базах данных

рано ты раскололся. надо было недельку подержать это в секрете


 
Sergey13 ©   (2009-12-22 13:19) [12]

> [10] d@nger   (22.12.09 12:35)

Не знаю как в ИБ6, в ФБ есть такая штука, как внешние таблицы. Можно попробовать наладить экспорт/импорт через них.
Или объединить все в одной БД. Аккуратно.


 
d@nger   (2009-12-22 13:46) [13]

вобщем это не так просто как я думал.. пока сделаю просто предупреждение, что эта запись уже содержится в дочерней таблице... спасибо за ответы..


 
Виталий Панасенко   (2009-12-22 13:59) [14]

да что там сложного?
> sniknik ©   (22.12.09 09:28) [6]

ответил...при попытке добавить запись с аналогичным ключом получаем KEY VIOLATION, который и обрабатываем в except....Будь хоть в какой БД (твоей или чужой)  данные...а вот фильтровать действительно сложноватисто.. особенно, если НД большой...



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2011.06.26;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.003 c
15-1299765057
Leon-Z
2011-03-10 16:50
2011.06.26
Алгоритмы.


15-1300139550
antonn_win7
2011-03-15 00:52
2011.06.26
Фаервол Comodo


2-1300254324
Andrey_1
2011-03-16 08:45
2011.06.26
DbGrid-ячейка в две строки


15-1300117961
Сергей К.
2011-03-14 18:52
2011.06.26
Bob Marley - no woman, no cry


2-1300451637
umbra
2011-03-18 15:33
2011.06.26
компилятор не распознает класс





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский