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

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

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

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

A sort plan can be assigned to any machine of the same machine_type.

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

При необходимости схему можно изменить.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
0
189
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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

Это была моя первая мысль, но я чувствую, что упускаю что-то очевидное.

Dave 11.12.2008 17:17

Просто убедитесь, что триггер может обрабатывать несколько вставок записей.

HLGEM 11.12.2008 17:29

Триггеры пугают. Я стараюсь избегать их без крайней необходимости. Однако некоторые люди действительно чувствуют, что их никогда не бывает достаточно.

BobbyShaftoe 15.12.2008 18:44
Ответ принят как подходящий

Вы можете изменить таблицу плана, чтобы в ней не было 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 }

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

Это может быть то, что я ищу. При создании планов сортировки машины не указываются, только тип машины.

Dave 11.12.2008 17:37

Затем вам нужно будет добавить тип машины обратно в sortPlan, но все же при назначении плана новой машине или создании расписания, требующего добавления записи в таблицу MachineSortPlan (а также в расписание), ваши ограничение

Charles Bretana 11.12.2008 17:45

«... требуя, чтобы запись была добавлена ​​в MachineSortPlan ...» Разве для этого не требуется триггер? Как я могу добиться этого с помощью только RI?

Dave 11.12.2008 17:57

Я пойду с этим в качестве ответа. Обсуждение убедило меня в том, что спусковой крючок, вероятно, лучший выход.

Dave 11.12.2008 18:49

Для использования схемы, которую я обрисовал, потребуется, чтобы запись существовала (или была добавлена) в MachineSortPlan .. Вы не можете добавлять новое расписание с FK в Machine_SortPlan до тех пор, пока не будет вставлена ​​запись machineSortPlan для этого FK для ссылки ...

Charles Bretana 11.12.2008 18:53

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