Вместо того, чтобы помещать идентификатор для человека, центра и активности в таблицу адресов, я бы предложил разместить address_id в каждой из других таблиц (человек, центр и деятельность).Затем вы можете повторно использовать один и тот же адрес в других таблицах и в разных комбинациях персонажа, центра и деятельности.
И касательно каскада, я думаю, справочное руководство по MySQL хорошо объясняет это :
CASCADE: удалить или обновить строку из родительской таблицы и автоматически удалить или обновить соответствующие строки в дочерней таблице.Поддерживаются как ON DELETE CASCADE, так и UPDATE CASCADE.Между двумя таблицами не следует определять несколько предложений ON UPDATE CASCADE, которые действуют на один и тот же столбец в родительской таблице или в дочерней таблице.
Таким образом, если вы изменили address_id, чтобы он был в каждом из остальныхтаблиц, а затем вы применили ограничение внешнего ключа
FOREIGN KEY `address_id` REFERENCES `#__address` (id) ON DELETE CASCADE
, а затем, когда вы удалили строку в таблице адресов (которая БЕЗ ограничения внешнего ключа), соответствующие строки в человеке, центре или деятельности (где внешние ключи определены), будут удалены.НО, я предполагаю, что это может быть не то, что вы хотите, потому что вы сказали, что человек, центр и деятельность «могут» иметь адрес.Поэтому, если вы удалили адрес, вы не обязательно хотите удалить человека, центр или деятельность, которая использовала этот адрес.Если это так, то я бы изменил ограничение внешнего ключа в каждой из 3 таблиц на:
FOREIGN KEY `address_id` REFERENCES `#__address` (id) ON DELETE SET NULL