Это для небольшого приложения для планирования. Мне нужен алгоритм для эффективного сравнения двух «расписаний», поиска различий и обновления только строк данных, которые были изменены, а также записей в другой таблице, содержащей эту таблицу в качестве внешнего ключа. Это большой вопрос, поэтому я сразу же скажу, что ищу либо общие рекомендации, либо конкретные решения.Каков эффективный алгоритм для редактирования «графика» наиболее эффективно?
EDIT: Как я уже говорил, я значительно укрепил вопрос.
В одной таблице я связываю ресурсы с интервалом времени, когда они используются.
У меня также есть вторая таблица (таблица B), которая использует идентификатор из таблицы A в качестве внешнего ключа.
Запись из таблицы А, соответствующая таблица B будет иметь промежуток времени, который вбирает промежутка времени из таблицы B. Не все записи в таблице A будут иметь запись в таблице B.
I 'm предоставляет интерфейс для пользователей, чтобы редактировать расписание ресурсов в таблице A. Они в основном предоставляют новый набор данных для таблицы A, которые мне нужно рассматривать как diff из версии в БД.
Если они полностью удаляют объект из таблицы A, на который указывает таблица B, я хочу также удалить запись из таблицы B.
Таким образом, учитывая следующие 3 комплекта:
- исходные объекты из таблицы А (из БД)
- исходные объекты из таблицы B (из БД)
- Отредактированное набор объекты из таблицы А (со стороны пользователя, так что никаких уникальных идентификаторов)
мне нужен алгоритм, который будет:
- Оставьте строки в таблице A и таблице B нетронутыми, если для этих объектов не требуются изменения.
- Добавьте строки в таблицу A по мере необходимости.
- При необходимости удалите строки из таблицы A и таблицы B.
- При необходимости измените строки в таблице A и таблице B.
Просто сортировка объектов в компоновке, где я могу применить соответствующие операции с базой данных, более чем подходит для решения.
Опять же, пожалуйста, ответьте, как конкретно или вообще, как вам нравится, я ищу советы, но если кто-то имеет полный алгоритм, который бы просто сделать мой день. :)
EDIT: В ответ на lassvek, я обеспечиваю некоторые дополнительные детали:
элементы таблицы Б всегда полностью содержится в таблице А элементов, а не только перекрытия.
Важно, Элементы таблицы B квантуются, поэтому они должны падать либо полностью, либо полностью снаружи. Если этого не произойдет, тогда у меня будет ошибка целостности данных, которую мне придется обрабатывать отдельно.
Например (использовать сокращенную):
Table A ID Resource Start End 01 Resource A 10/6 7:00AM 10/6 11:00AM 02 Resource A 10/6 1:00PM 10/6 3:00PM Table B ID Table_A_ID Start End 01 02 10/6 1:00PM 10/6 2:00PM
Так что я хочу следующее поведение:
- Если удалить ID 02 из таблицы А, или сократить его до 2:00 вечера - 3:00 PM, я должен удалить ID 01 из таблицы B.
- Если я разворачиваю таблицу A ID 01 туда, где она заканчивается в 1:00 вечера, эти две записи должны быть объединены в один ряд, а таблица B ID 01 должен теперь указывать на идентификатор таблицы A 01.
- Если я удалю 8:00 AM-10:00AM из таблицы A ID 01, эта запись должна быть разделена на две записи: одна для 7:00 AM-8:00AM и новая запись (ID 03) для 10 : 00 am-11: 12 утра.
Привет lassevk, спасибо за ответ. Да, это первый сценарий (B полностью содержится внутри A). Я попытаюсь добавить конкретный пример к моему запросу. – 2008-10-06 13:27:28