Лучший ответ зависит от платформы. Для развертывания в Windows у меня были хорошие результаты с помощью комбинации одна банка и launch4j. Это действительно брало некоторое время для установки моей среды сборки правильно (скрипты Ant, главным образом), но теперь это является довольно безболезненным.
Ограничения FK обеспечивают согласованность ваших данных. Вот и все. Это главное преимущество. Ограничения FK не принесут вам никакого прироста производительности.
Но, если вы специально не денормализовали структуру db, я бы рекомендовал вам использовать ограничения FK. Основная причина - постоянство.
Основное преимущество состоит в том, что ваша база данных не станет противоречивой, если ваш код клиента с ошибками попытается сделать что-то не так. Внешние ключи - это своего рода «ограничение», поэтому вы должны их использовать
. У них нет никаких «функциональных» преимуществ, они ничего не оптимизируют. Вам все равно придется самостоятельно создавать индексы и т. Д. И да, вы можете иметь значения NULL в столбце, который является внешним ключом.
As mentioned, they are for data integrity. Any performance "loss" would be utterly wiped out by the time required to fix broken data.
However, there could be an indirect performance benefit.
For SQL Server at least, the columns in the FK must have the same datatype on each side. Without an FK, you could have an nvarchar parent and a varchar child for example. When you join the 2 tables, you'll get a datatype conversions which can kill performance.