Каскадное изменение значений в таблицах

Krisha

pain in the neck
Каскадное изменение значений в таблицах

Есть 2 таблицы:

Таблица «Modules»

ModuleID
ModuleNum – порядковый номер модуля
ModuleName – название модуля

Таблица «Lessons»

LessonID
LessonNum – порядковый номер урока
ModuleID

у ModuleNum и LessonNum жесткая нумерация, пример:

Module 1
- Lesson 1
- Lesson 2
- Lesson 3

Module 2
- Lesson 4
- Lesson 5
- Lesson 6

если поменялся номер модуля 1 на номер 2, соответственно необходимо поменять номер модуля 2 на номер 1, более того, необходимо, чтобы номера уроков тоже "пересчитались", на выходе нужно получить:

Module 1 (бывший модуль 2)
- Lesson 1 (бывший урок 4)
- Lesson 2 ....
- Lesson 3 ....

Module 2 (бывший модуль 1)
- Lesson 4 (бывший урок 1)
- Lesson 5 ...
- Lesson 6 ...

У кого какие идеи, как это лучше реализовать ?
 

Aville

Guest
Начнем с того как все храниться?
В таблице?
Тогда мне кажется таблица такая должна быть одна:

НомерРодитель; НомерДочерний; Наименование
1; 0; Название модуля 1
1; 1; Название урока 1 для модуля 1
1; 2; Название урока 2 для модуля 1
1; 3; Название урока 3 для модуля 1
2; 0; Название модуля 2
2; 1; Название урока 1 для модуля 2
2; 2; Название урока 2 для модуля 2
2; 3; Название урока 3 для модуля 2

А уроки привязывай по двум полям НомерРодитель и НомерДочерний

Вот и крути цыфры как в математике
 

ForJest

- свежая кровь
А если у тебя еще раз модули сдвинутся, то как уроки будут называться?
Module 1 (бывший модуль 2)
- Lesson 1 (бывший урок 4) (бывший урок 1)

Так что ли? :)
 

Krisha

pain in the neck
Всё, всем спасибо, особенно ForJest

решение:

1. вычислить разницу в номерах между уроками одной и другой секции
2. первую секцию UPDATE .. SET num = Num + N WHERE ModuleID = id
3. вторую секцию UPDATE .. SET num = Num - N WHERE ModuleID = id
 
Сверху