Поддержание ссылочной целостности
Учитывая схему:
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 }
Это также имеет дополнительное преимущество в том, что вы НЕ вводите безвозвратно правила для плана, к которому они относятся. Вы сохраняете эту связь отдельно и при необходимости можете принять решение использовать один и тот же набор правил (тот же план для машин более чем одного типа машин...