Ваш путь хорош, но я думаю, что внешние ключи лучше. Если бы у вас не было этого внешнего ключа, вы бы удалили сообщение, но все дети этого сообщения (называемые сиротами, потому что у них больше нет родителей) застряли бы вокруг. Чтобы обойти ошибку внешнего ключа, необходимо сначала удалить все дочерние элементы для этого сообщения, а затем удалить сообщение.
Хорошая новость заключается в том, что внешние ключи также могут сделать это для вас, поэтому вам не нужно беспокоиться о том, чтобы отслеживать всех детей. При настройке внешнего ключа, если вы добавляете предложение on delete cascade
, при удалении записи база данных автоматически удалит для вас все дочерние элементы сообщений, и удаление сообщения без предварительного удаления дочерних элементов больше не приведет к ошибке.
Если вы предпочитаете, чтобы дети оставались рядом даже после удаления записи, вы можете использовать on delete set null
вместо этого, чтобы просто установить для внешнего ключа детей значение null, а не удалять запись.
Это все полезно для обеспечения целостности данных (базы данных должны содержать только точные и действительные данные).