Поддержание ссылочной целостности
-
21-08-2019 - |
Вопрос
Учитывая схему:
MACHINE_TYPE { machine_type } MACHINE { machine, machine_type } SORT_PLAN { sort_plan, machine_type } SCHEDULE { day_of_week, machine, sort_plan }
и бизнес-правило:
План сортировки может быть назначен любому машина того же machine_type.
Как мне обеспечить, чтобы в SCHEDULE кортежи, на которые ссылается машина и sort_plan имеют те же тип аппарата?
При необходимости схему можно изменить.
Решение
Вы можете изменить таблицу плана, чтобы в ней не было 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.