Поддержание ссылочной целостности

Учитывая схему:

MACHINE_TYPE {machine_type}
MACHINE {machine, machine_type}
SORT_PLAN {sort_plan, machine_type}
SCHEDULE {day_of_week, machine, sort_plan}

и бизнес-правило:

План сортировки может быть назначен любой машине того же типа machine_type.

Как сделать так, чтобы в SCHEDULE кортежи, на которые ссылаются machine и sort_plan, имели одинаковый machine_type?

Схема может быть изменена, если это необходимо.

2 ответа

Решение

Вы можете изменить таблицу плана, чтобы она не имела MachineType, и добавить новую таблицу с именем machinePlan, в которой есть строка для каждой машины, которая может использовать этот план, с MachineId и PlanId. Затем выведите MachineType для плана из таблицы родительских компьютеров этой новой таблицы, а не из самой таблицы планов.

Наконец, измените таблицу расписания так, чтобы FK вернулся к этой новой таблице MachinePlan, а не как у вас сейчас

MACHINE_TYPE { machine_type }
MACHINE { machine, machine_type }
SORT_PLAN { sort_plan}
MACHINE_SORTPLAN {machine, sort_plan }
SCHEDULE { day_of_week, machine_Sortplan }

Это также имеет дополнительное преимущество в том, что вы НЕ вводите безвозвратно правила для плана, к которому они относятся. Вы сохраняете эту связь отдельно и при необходимости можете принять решение использовать один и тот же набор правил (тот же план для машин более чем одного типа машин...

Я бы использовал триггер вставки в таблице SCHEDULE.

Другие вопросы по тегам