У меня есть структура базы данных, которая имеет два отношения «один ко многим».У меня есть веб-сайт, на котором много тем, у каждого из которых много вопросов.В результате получается три таблицы базы данных, по одной для каждого из этих типов данных.
Я занимаюсь созданием промежуточной области, где я могу вносить изменения в эти сайты, не затрагивая работающий сайт.,Итак, я продублировал структуру таблицы с целью редактирования дубликатов и внесения изменений в живую версию, когда изменения будут готовы.Я хотел бы сделать это в одной хранимой процедуре, но я не могу понять, как поддерживать отношения между субъектами и их вопросами.
На сайте есть отличительные особенности, отличные от его идентификатора, так что это легкоДостаточно, чтобы найти живую версию сайта, обновить его информацию и даже перенести темы этого сайта из промежуточных таблиц в живые таблицы.
Вот некоторый псевдокод того, что мой план предназначен для 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
Как я уже сказал, я хотел бы сохранить все это в том же хранилищепроцедура.Если это невозможно, то я, очевидно, остановлюсь на вышеприведенной версии, но ради эффективности я бы предпочел не иметь несколько обращений к базе данных.