Есть три MySQL InnoDB таблицы `country`, `region`, `city`. В каждой из них хранятся строки: страны, федеральные административные округи/области и города/населённые пункты соотвественно. Требуется связать таблицы внешними ключами.
У таблицы `country` поля:
- 'id' (primary key); // порядковый ID
- 'title' (string); // название государства
У таблицы `region` поля:
- 'id' (primary key); // порядковый ID
- 'country_id' (integer, notNull); // ID государства `country`.`id`
- 'title' (string); // название округа/области
У таблицы `city` поля:
- 'id' (primary key); // порядковый ID
- 'country_id' (integer, notNull); // ID государства `country`.`id`
- 'region_id' (integer, Null); // ID округа/области `region`.`id`
- 'title' (string); // название города/населенного пункта
Вопрос в следующем. Как правильно добавить связь (FOREIGN KEY) главной `city` к зависимой `region` таблице, если поле `city`.`region_id` может быть NULL, например для Москва, Санкт-Петербург (не входит в состав областей), являясь самостоятельными субъектами Российской Федерации, и как следствии не должны быть привязаны к `region`.`id`?
Ведь при добавлении таких записей в таблицу `city` у таблицы `region` нет соответствующей записи с `region`.`id` = NULL, выводится ошибка:
SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`city`, CONSTRAINT `fk_city_to_region` FOREIGN KEY (`region_id`) REFERENCES `region` (`id`) ON DELETE CASCADE)
The SQL being executed was: INSERT INTO `city` (`country_id`, `region_id`, `title`) VALUES (109, 0, 'Москва')