Получил кромку края, которую я надеюсь решить.MySQL :: Edge Case :: Mixed Type Foreign Key :: Возможно или мечтает?
Мы управляем спортивным отчетом, который записывает среди других статистических данных результаты бокса, которые могут включать в себя нелигового/не-реестрового противника. Под этим я подразумеваю, что в некоторых случаях противник Foo не имеет списка (и никогда не будет) в нашей системе.
Вместо того, чтобы просто опускать любую статистику для команды противника, владелец запросил давно, что мы вставляем опцию, позволяющую вводить имена игроков (в отличие от выбора [playerID] из раскрывающегося списка имен игроков для существующего списка). Итак, наша таблица ростов имеет столбец int playerID PK, но наши таблицы статистики (нарушение & защиты) имеют столбцы идентификатора varchar.
Это позволяет нам выполнять внешнее соединение в таблице списка и получать соответствующие записи независимо от того, существует ли список команд или нет (если мы просто не распечатываем файл статистики игрока varchar statID как имя игрока). Взломанный наверняка, но выполняет эту работу.
Теперь у меня есть таблица FK таблицы результатов в таблице статистики, поэтому, если результат игры будет удален, связанные статистики также будут. Однако нам не хватает важного ограничения: список >> статистика. Поскольку типы столбцов идентификатора игрока не совпадают, я не могу добавить FK мне нужно заполнить пробел ограничений (т. Е. Удалить игрока из списка, а все его/ее показатели будут потеряны, а не хороши).
Любые идеи о том, как обойти это?
Используйте триггер, чтобы принудительно удалить каскад. –
+1 @ Денис, да, или иметь дело с ним на уровне промежуточного слоя. Однако попытаться интегрироваться с ORM, поэтому надеялся, что сможет определить ограничение в промежуточном программном обеспечении и применить его в MySQL. – virtualeyes
Я бы использовал триггер для себя. Или немного переработайте модель с промежуточной таблицей, если это необходимо. –