Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Организация сопряжения со сторонней таблицей с автоинкреметным ключом  [new]
mid-level savior
Guest
Подскажите пожалуйста, как решить следующую задачу:
1. есть сторонняя БД (NewSoftDB), в ней таблица (tblDoc) с автоинкрементным id.
2. по требованиям обновления данной БД изменения в ее структуре таблиц исключены
3. для сопряжения с текущими программами требуется наличие записей, связанных с этими автоинкрементыми id
4. для этого каждой записи из таблицы tblDoc в NewSoftDB должна соответствовать одна запись в таблице tblDocMore в БД OldSoftDB
В качестве решения данной задачи в голову пришел вариант заполнить таблицу tblDocMore idшниками от 1 до пары миллионов, чтобы хватило на несколько лет. Потом же вытягивать объединенную таблицу связью один-к-одному tblDoc и tblDocMore.
Есть ли иной вариант? Т.е. создавать для каждого нового значения автоинкрементного значения tblDoc запись в таблице tblDocMore? В хранимые процедуры добавления объектов сторонней системы не очень хочется, хотя и можно.
Может есть какой-то еще вариант?
25 янв 16, 13:32    [18725443]     Ответить | Цитировать Сообщить модератору
 Re: Организация сопряжения со сторонней таблицей с автоинкреметным ключом  [new]
Glory
Member

Откуда:
Сообщений: 104760
mid-level savior
4. для этого каждой записи из таблицы tblDoc в NewSoftDB должна соответствовать одна запись в таблице tblDocMore в БД OldSoftDB

Что это значит ?
Что все изменения в tblDoc должны дублироваться в tblDocMore ?
25 янв 16, 13:36    [18725465]     Ответить | Цитировать Сообщить модератору
 Re: Организация сопряжения со сторонней таблицей с автоинкреметным ключом  [new]
StarikNavy
Member

Откуда: Москва
Сообщений: 2396
mid-level savior,

тупо копируете из таблицы с автоинкрементом, в свою таблицу без автоинкримента
25 янв 16, 13:40    [18725502]     Ответить | Цитировать Сообщить модератору
 Re: Организация сопряжения со сторонней таблицей с автоинкреметным ключом  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31446
mid-level savior
В качестве решения данной задачи в голову пришел вариант заполнить таблицу tblDocMore idшниками от 1 до пары миллионов, чтобы хватило на несколько лет.
Зачем заполнить? Просто копируйте новые записи туда. Например, по расписанию, через линкед-сервер или SSIS пакетом.
Вообще для таких целей предусмотрена репликация, но наверное её вам нельзя использовать, раз никаких изменений в базе делать нельзя.
Или, действительно, поменяйте процедуры вставки, хотя есть опасность получить рассинхронизацию.
25 янв 16, 13:42    [18725512]     Ответить | Цитировать Сообщить модератору
 Re: Организация сопряжения со сторонней таблицей с автоинкреметным ключом  [new]
mid-level savior
Guest
Glory
mid-level savior
4. для этого каждой записи из таблицы tblDoc в NewSoftDB должна соответствовать одна запись в таблице tblDocMore в БД OldSoftDB

Что это значит ?
Что все изменения в tblDoc должны дублироваться в tblDocMore ?

Да, не смог понятно объяснить.
Была своя таблица учета, в которой было 50 полей. Теперь установлен новый софт, в таблице котором невозможно хранить 20 полей, которые нам нужны.
Искал способ организацию хранения этих данных, пришел к рецепту создания доп БД, в которой будет таблица tblDocMore, где для каждой записи из tblDoc будет иметься запись с таким же id, где и буду хранить нужные 20 полей.
Возник вопрос, как обеспечить автоматическое создание записи по запросу, типа если идет SELECT с JOINом, то для отсутствующего в tblDocMore создается запись с нужным idшником.
25 янв 16, 13:44    [18725528]     Ответить | Цитировать Сообщить модератору
 Re: Организация сопряжения со сторонней таблицей с автоинкреметным ключом  [new]
Glory
Member

Откуда:
Сообщений: 104760
mid-level savior
Возник вопрос, как обеспечить автоматическое создание записи по запросу, типа если идет SELECT с JOINом, то для отсутствующего в tblDocMore создается запись с нужным idшником.

Ну так просто скопируйте отсутствующие в tblDocMore записи из tblDoc
25 янв 16, 13:45    [18725547]     Ответить | Цитировать Сообщить модератору
 Re: Организация сопряжения со сторонней таблицей с автоинкреметным ключом  [new]
mid-level savior
Guest
alexeyvg
Зачем заполнить? Просто копируйте новые записи туда. Например, по расписанию, через линкед-сервер или SSIS пакетом.

Запись может быть добавлена сейчас. А через пять минут конечный пользователь открывает сджойненную таблицу и должен уже иметь дополнительные поля для ввода, т.е. дублирующие idшники там уже должны лежать. Поэтому хочу набить ее idшниками, и select будет ближайшие N лет всегда возвращать корреспондирующую запись из tblDocMore.
alexeyvg
Вообще для таких целей предусмотрена репликация, но наверное её вам нельзя использовать, раз никаких изменений в базе делать нельзя.

Хм. Репликация вполне как вариант, но не владею этим инструментом чуть менее, чем никак...
alexeyvg
Или, действительно, поменяйте процедуры вставки, хотя есть опасность получить рассинхронизацию.
Здесь придется все обновления софтины отслеживать, когда она перепишет свои процедуры создания объектов снова лезть туда, а я могу быть в это время в отпуске :)
25 янв 16, 13:47    [18725568]     Ответить | Цитировать Сообщить модератору
 Re: Организация сопряжения со сторонней таблицей с автоинкреметным ключом  [new]
Glory
Member

Откуда:
Сообщений: 104760
mid-level savior
Запись может быть добавлена сейчас. А через пять минут конечный пользователь открывает сджойненную таблицу и должен уже иметь дополнительные поля для ввода, т.е. дублирующие idшники там уже должны лежать. Поэтому хочу набить ее idшниками, и select будет ближайшие N лет всегда возвращать корреспондирующую запись из tblDocMore.

Вы знаете, что такое триггер для таблицы ?
Вы знаете, что такое OUTER JOIN ?
25 янв 16, 13:49    [18725587]     Ответить | Цитировать Сообщить модератору
 Re: Организация сопряжения со сторонней таблицей с автоинкреметным ключом  [new]
mid-level savior
Guest
Glory
mid-level savior
Возник вопрос, как обеспечить автоматическое создание записи по запросу, типа если идет SELECT с JOINом, то для отсутствующего в tblDocMore создается запись с нужным idшником.

Ну так просто скопируйте отсутствующие в tblDocMore записи из tblDoc
В какой момент и каким образом это делать, если мне нужно, чтобы после создания записи в tblDoc, автоматически запись появлялась в tblDocMore? Точнее будет сказать, это необходимо в момент обращения к вьюхе, которая возвращает объединенные сведения. Триггер на вьюху, получается тоже будет вариант. Или пользователь будет обращаться к table function, которая перед выводом значений будет копировать значения id из tblDoc в tblDocMore... Вроде бы норм вариант нарисовывается.
25 янв 16, 13:50    [18725594]     Ответить | Цитировать Сообщить модератору
 Re: Организация сопряжения со сторонней таблицей с автоинкреметным ключом  [new]
mid-level savior
Guest
Glory
mid-level savior
Запись может быть добавлена сейчас. А через пять минут конечный пользователь открывает сджойненную таблицу и должен уже иметь дополнительные поля для ввода, т.е. дублирующие idшники там уже должны лежать. Поэтому хочу набить ее idшниками, и select будет ближайшие N лет всегда возвращать корреспондирующую запись из tblDocMore.

Вы знаете, что такое триггер для таблицы ?
Вы знаете, что такое OUTER JOIN ?
Да, знаю (хотя и слабо). На таблицу tblDoc я не могу повесить триггер, т.к. изменения в структуре той БД практически исключены. Если я что-то сломаю или замедлю работу триггером, мне будет нехорошо.
25 янв 16, 13:51    [18725606]     Ответить | Цитировать Сообщить модератору
 Re: Организация сопряжения со сторонней таблицей с автоинкреметным ключом  [new]
Glory
Member

Откуда:
Сообщений: 104760
mid-level savior
В какой момент и каким образом это делать, если мне нужно, чтобы после создания записи в tblDoc, автоматически запись появлялась в tblDocMore? Точнее будет сказать, это необходимо в момент обращения к вьюхе, которая возвращает объединенные сведения. Триггер на вьюху, получается тоже будет вариант. Или пользователь будет обращаться к table function, которая перед выводом значений будет копировать значения id из tblDoc в tblDocMore... Вроде бы норм вариант нарисовывается.


select *
from tblDoc a left outer join tblDocMore b on a.id = b.id

без проблем выведет вам все id
25 янв 16, 13:52    [18725608]     Ответить | Цитировать Сообщить модератору
 Re: Организация сопряжения со сторонней таблицей с автоинкреметным ключом  [new]
mid-level savior
Guest
Glory
mid-level savior
В какой момент и каким образом это делать, если мне нужно, чтобы после создания записи в tblDoc, автоматически запись появлялась в tblDocMore? Точнее будет сказать, это необходимо в момент обращения к вьюхе, которая возвращает объединенные сведения. Триггер на вьюху, получается тоже будет вариант. Или пользователь будет обращаться к table function, которая перед выводом значений будет копировать значения id из tblDoc в tblDocMore... Вроде бы норм вариант нарисовывается.


select *
from tblDoc a left outer join tblDocMore b on a.id = b.id

без проблем выведет вам все id

Но я не смогу внести новые значения в tblDocMore для тех id, которые в tblDocMore нет? Или смогу?
25 янв 16, 13:53    [18725622]     Ответить | Цитировать Сообщить модератору
 Re: Организация сопряжения со сторонней таблицей с автоинкреметным ключом  [new]
mid-level savior
Guest
mid-level savior
Glory
пропущено...


select *
from tblDoc a left outer join tblDocMore b on a.id = b.id

без проблем выведет вам все id

Но я не смогу внести новые значения в tblDocMore для тех id, которые в tblDocMore нет? Или смогу?

т.е. не смогу заполнить данные в те самые нужные 20 полей
25 янв 16, 13:54    [18725628]     Ответить | Цитировать Сообщить модератору
 Re: Организация сопряжения со сторонней таблицей с автоинкреметным ключом  [new]
Glory
Member

Откуда:
Сообщений: 104760
mid-level savior
т.е. не смогу заполнить данные в те самые нужные 20 полей

Заполнить где ? И чем ?
25 янв 16, 13:54    [18725635]     Ответить | Цитировать Сообщить модератору
 Re: Организация сопряжения со сторонней таблицей с автоинкреметным ключом  [new]
mid-level savior
Guest
Glory
mid-level savior
т.е. не смогу заполнить данные в те самые нужные 20 полей

Заполнить где ? И чем ?

таблица tblDoc в БД NewSoftDB
id Фамилия Имя
1 Петров Николай
2 Семенов Григорий

Но мне нужно хранить еще и отчество, поэтому создаю tblDocMore в БД OldSoftDB
id Отчество
1 Сидорович
2

Ну и JOINом вытаскиваю результат
id Фамилия Имя Отчество
1 Петров Николай Сидорович
2 Семенов Григорий

при этом юзер может заполнить отчество Александрович при просмотре select'а.
Ok.
Теперь вот в tblDoc добавилась запись
id Фамилия Имя
1 Петров Николай
2 Семенов Григорий
3 Михайлов Даниил

и join вернет
id Фамилия Имя Отчество
1 Петров Николай Сидорович
2 Семенов Григорий Александрович
3 Михайлов Даниил NULL

вот разве в этом случае, когда в таблице tblDocMore нет записи с id=3, сможет пользователь внести отчество для Михайлова Даниила?
25 янв 16, 14:18    [18725844]     Ответить | Цитировать Сообщить модератору
 Re: Организация сопряжения со сторонней таблицей с автоинкреметным ключом  [new]
Glory
Member

Откуда:
Сообщений: 104760
mid-level savior
при этом юзер может заполнить отчество Александрович при просмотре select'а.

И вчем проблема юзеру "заполнить отчество Александрович при просмотре select'а" ?

mid-level savior
вот разве в этом случае, когда в таблице tblDocMore нет записи с id=3, сможет пользователь внести отчество для Михайлова Даниила?

Вот это будет полностью зависеть от написанной вам программы.
25 янв 16, 14:21    [18725870]     Ответить | Цитировать Сообщить модератору
 Re: Организация сопряжения со сторонней таблицей с автоинкреметным ключом  [new]
Konst_One
Member

Откуда:
Сообщений: 11540
ТС,
начните с требований вашей клиентской программы
если код этой программы вам не доступен, то вряд ли у вас что-то выйдет с редактированием вашей новой расширенной таблицы
25 янв 16, 14:22    [18725878]     Ответить | Цитировать Сообщить модератору
 Re: Организация сопряжения со сторонней таблицей с автоинкреметным ключом  [new]
mid-level savior
Guest
Glory
mid-level savior
при этом юзер может заполнить отчество Александрович при просмотре select'а.

И вчем проблема юзеру "заполнить отчество Александрович при просмотре select'а" ?

В случае когда в таблице tblDocMore уже есть id, то проблем нет. Поэтому и пришла мысль забить ее idшниками до пары миллионов. Тогда на создаваемые в течении нескольких лет автоинкрементные id в таблице tblDoc, будет всегда соответствующая запись в tblDocMore.
Glory
mid-level savior
вот разве в этом случае, когда в таблице tblDocMore нет записи с id=3, сможет пользователь внести отчество для Михайлова Даниила?

Вот это будет полностью зависеть от написанной вам программы.

Как раз это вопрос выношу на суд SQL-общественности.
1. забить idшниками
2. реплицировать tblDoc в другую БД, куда добавить нужные поля
-как это настроить для моментального срабатывания -хз?
3. table-valued функция, которая будет предварительно добавлять отсутствующие id
Не подходят:
1. триггеры на tblDoc, т.к. эффекты на производительность непредсказуемы, а база боевая.
25 янв 16, 14:27    [18725918]     Ответить | Цитировать Сообщить модератору
 Re: Организация сопряжения со сторонней таблицей с автоинкреметным ключом  [new]
mid-level savior
Guest
Konst_One
ТС,
начните с требований вашей клиентской программы
если код этой программы вам не доступен, то вряд ли у вас что-то выйдет с редактированием вашей новой расширенной таблицы

Код моей клиентской программы как раз буду править, чтобы она сопрягалась с новой системой. Как это править - прошу оценить варианты, ищу, как положено, минимум телодвижений. :)
25 янв 16, 14:28    [18725936]     Ответить | Цитировать Сообщить модератору
 Re: Организация сопряжения со сторонней таблицей с автоинкреметным ключом  [new]
Konst_One
Member

Откуда:
Сообщений: 11540
забить заранее номера ID не выход, тк отменённые транзакции и прямое удаление записей из основной таблицы случаются и у вас будут несоответствия
25 янв 16, 14:30    [18725949]     Ответить | Цитировать Сообщить модератору
 Re: Организация сопряжения со сторонней таблицей с автоинкреметным ключом  [new]
Glory
Member

Откуда:
Сообщений: 104760
mid-level savior
Как раз это вопрос выношу на суд SQL-общественности.
1. забить idшниками
2. реплицировать tblDoc в другую БД, куда добавить нужные поля
-как это настроить для моментального срабатывания -хз?
3. table-valued функция, которая будет предварительно добавлять отсутствующие id
Не подходят:
1. триггеры на tblDoc, т.к. эффекты на производительность непредсказуемы, а база боевая.

Напишите нормальную клиентскую программу
Которая сможет правильно сделать INSERT или UPDATE в зависимости от того, что ввел пользователь и что есть в таблицах
25 янв 16, 14:30    [18725950]     Ответить | Цитировать Сообщить модератору
 Re: Организация сопряжения со сторонней таблицей с автоинкреметным ключом  [new]
mid-level savior
Guest
Konst_One
забить заранее номера ID не выход, тк отменённые транзакции и прямое удаление записей из основной таблицы случаются и у вас будут несоответствия
Пусть будут. Удаленные записи они мешать не будут, т.к. вытаскивать данные буду строгим JOINом, и на выходе только записи которые есть в tblDoc и tblDocMore.
Glory
Напишите нормальную клиентскую программу
Которая сможет правильно сделать INSERT или UPDATE в зависимости от того, что ввел пользователь и что есть в таблицах

Хотелось бы решить это на стороне сервера, т.к. приложений, использующих данную связку - много, и править код каждой будет весьма затратно. Поэтому цель - сделать выдачу с сервера таблицы с нужными полями, без каких-либо подозрений об этом клиента :)
25 янв 16, 14:34    [18725972]     Ответить | Цитировать Сообщить модератору
 Re: Организация сопряжения со сторонней таблицей с автоинкреметным ключом  [new]
Glory
Member

Откуда:
Сообщений: 104760
mid-level savior
Хотелось бы решить это на стороне сервера, т.к. приложений, использующих данную связку - много, и править код каждой будет весьма затратно. Поэтому цель - сделать выдачу с сервера таблицы с нужными полями, без каких-либо подозрений об этом клиента :)

Что "это" ?
Чтобы сервер сам себе писал команды ?
Нафиг тогда нужны вы с вашим приложением ?
25 янв 16, 14:35    [18725988]     Ответить | Цитировать Сообщить модератору
 Re: Организация сопряжения со сторонней таблицей с автоинкреметным ключом  [new]
Konst_One
Member

Откуда:
Сообщений: 11540
mid-level savior
Konst_One
забить заранее номера ID не выход, тк отменённые транзакции и прямое удаление записей из основной таблицы случаются и у вас будут несоответствия
Пусть будут. Удаленные записи они мешать не будут, т.к. вытаскивать данные буду строгим JOINом, и на выходе только записи которые есть в tblDoc и tblDocMore.
Glory
Напишите нормальную клиентскую программу
Которая сможет правильно сделать INSERT или UPDATE в зависимости от того, что ввел пользователь и что есть в таблицах

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


не выйдет у вас ничего хорошего
25 янв 16, 14:38    [18726000]     Ответить | Цитировать Сообщить модератору
 Re: Организация сопряжения со сторонней таблицей с автоинкреметным ключом  [new]
mid-level savior
Guest
Glory
mid-level savior
Хотелось бы решить это на стороне сервера, т.к. приложений, использующих данную связку - много, и править код каждой будет весьма затратно. Поэтому цель - сделать выдачу с сервера таблицы с нужными полями, без каких-либо подозрений об этом клиента :)

Что "это" ?

"это" - добавление отсутствующих записей в tblDocMore, при дергании select'а.
варианты описал выше.
Glory
Чтобы сервер сам себе писал команды ?

Угу, использовать мощь T-SQL.
Glory
Нафиг тогда нужны вы с вашим приложением ?

Видимо вы фронтенд приложения никогда не писали. Вопрос маразматический.
25 янв 16, 14:39    [18726011]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить