NHibernate не требует присутствия внешних ключей в базе данных для использования, однако я по-прежнему рекомендую добавлять внешние ключи, когда это возможно, поскольку внешние ключи - это хорошая вещь , которую они делают убедитесь, что ссылочная целостность вашей базы данных такова, как и должно быть.
Например, если бы в моей базе данных была таблица User
и Comment
, и я должен был удалить пользователя 1, который сделал два комментария без внешних ключей, у меня теперь было бы два комментария без владельца ! Мы, очевидно, не хотим, чтобы такая ситуация когда-либо возникала.
Это - то, где внешние ключи входят, объявляя, что User
является внешним ключом в таблице Comment
, наш сервер базы данных удостоверится, что мы не можем удалить пользователя, если у него нет комментариев, связанных с ним или ее (больше).
Добавление внешних ключей в базу данных - это хорошо. Это представит существующие недействительные данные. Он сохранит действительные действительные данные. Возможно, вам придется выполнить некоторые манипуляции с данными для таблиц, которые уже потеряли самообладание (то есть создать «Неизвестный пользователь» или что-то подобное и обновить все несуществующие ключи, чтобы указать на него, это решение, которое необходимо принять после изучения смысл данных).
Изначально это может даже вызвать несколько проблем, когда существующее приложение аварийно завершает работу, если, например, оно не удаляет все данные, которые оно должно сделать (например, не удаляет все комментарии в моем примере). Но это хорошая вещь в долгосрочной перспективе, так как она показывает, где что-то идет не так, и позволяет вам исправить их, пока данные и база данных не попадут в еще худшее состояние.
NHibernate каскады отделены от внешних ключей и являются способом NHibernate, позволяющим, например, убедиться, что все дочерние объекты удаляются при удалении родителя. Это, например, позволяет вам убедиться, что любое изменение, которое вы вносите в модель данных, не нарушает ваши отношения с внешним ключом (что приведет к исключению из базы данных и не будет применено никаких изменений). Лично я предпочитаю позаботиться об этом сам, но вам решать, хотите ли вы их использовать и как.