Перемещение данных из промежуточных таблиц в живые таблицы при сохранении отношения один ко многим - PullRequest
0 голосов
/ 12 января 2011

У меня есть структура базы данных, которая имеет два отношения «один ко многим».У меня есть веб-сайт, на котором много тем, у каждого из которых много вопросов.В результате получается три таблицы базы данных, по одной для каждого из этих типов данных.

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

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

Вот некоторый псевдокод того, что мой план предназначен для push:

-- pass in the ID of the staging website
-- get the ID of the live website
-- update live website data from staging website data
    -- this is a strict update - if there is a staging version, there will necessarily be a live version
-- delete all live subjects
-- delete all live questions
-- copy subjects from staging to live
-- copy questions from staging to live

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

Я смогнаписать реальный код для большей части этого, поскольку это относительно просто.Но выяснить, как поддерживать отношения между субъектами и вопросами, было проблемой.Если бы я делал это на языке сценариев на стороне сервера, я бы сделал что-то вроде этого (опять же, псевдокод):

for each subject
    copy information from staging subject to live subject
    get id of new live subject
    for each question in this subject
        copy information from staging to live, setting subject ID to new live ID

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

1 Ответ

1 голос
/ 12 января 2011

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

Если вы настроили связанные серверы, вы можете сделать следующее

SET IDENTITY_INSERT MYTABLENAME ON

INSERT INTO MyTableName  (IdenityColumn, Col1, Col2, Col3) 
SELECT StagingIdentityColumn, StagingCol1, StagingCol2, StagingCol3
FROM StagingServer.StagingDatabase.DBO.MyTableName

SET IDENTITY_INSERT MyTableName OFF

Конечно, теперь вы должны вставить в правильном порядке, чтобы сохранить целостность ссылочной целостности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...