Среда разработки должна отключить внешние ключи?

atoi является частью стандартной библиотеки C, с подписью int atoi(const char *);.

Вы заявляете, что функция с таким именем существует, но выдает ей другой тип возвращаемого значения. Обратите внимание, что в C имя функции является единственным, что имеет значение, и набор инструментов может доверять только тому, что вы говорите в исходном коде. Если вы врете компилятору, как здесь, все ставки сняты.

Вы должны выбрать другое имя для собственной реализации, чтобы избежать проблем.


Как пишет @pmg, стандарт C (ссылка на C99.7.1.3 ) говорит, что использование имен из стандартной библиотеки C для ваших собственных глобальных символов (функций или глобальных переменных) явно Неопределенное поведение . Остерегайтесь носовых демонов!

5
задан John Christensen 18 May 2009 в 20:48
поделиться

12 ответов

Я ВСЕГДА оставляю их включенными. Вы хотите убедиться, что ваш код не будет делать что-то, что нарушает правила FK. Если вы их удалили, ничто не мешает коду вводить неверные данные. Кроме того, мы будем использовать такие инструменты, как CodeSmith, чтобы помочь с некоторыми из наших частей автоматизации, а с CodeSmith он может автоматически генерировать для нас процедуры запроса, если у нас есть FK.

В целом, я твердо верю, что разработка среда должна быть очень близкой копией производственной среды. Если у вас их нет, очень возможно, что код выйдет из строя в производственной среде, потому что он нарушает ограничение FK, и он будет отлично работать при тестировании.

24
ответ дан 18 December 2019 в 05:13
поделиться

Absolutely keep them enabled. The existence of foreign key constraints is actually very useful in development; not using the constraints can allow for lazy development; moreover, it can allow for some serious problems to creep into the code, that could cause some difficulties when moving to a production environment.

9
ответ дан 18 December 2019 в 05:13
поделиться

Я всегда оставляю FK включенными в своей среде. Причина этого в том, что если я кодирую отсутствие FK, что-то может сломаться позже, когда они включены.

Даже если их включение может вызвать немного больше головной боли, на мой взгляд, это того стоит в долгосрочной перспективе.

6
ответ дан 18 December 2019 в 05:13
поделиться

Я настоятельно рекомендую вам не снимать их. Он обеспечивает безопасную сеть, чтобы убедиться, что ваш уровень данных работает правильно. То есть, если вы не работаете с приложениями ETL и вам нужно специально отключать ограничения для загрузки данных.

4
ответ дан 18 December 2019 в 05:13
поделиться

На мой взгляд, наличие внешних ключей в среде разработки не будет препятствием, но будет преимуществом . Целостность данных - это хорошо, и внешние ключи - отличный способ обеспечить ее соблюдение.

4
ответ дан 18 December 2019 в 05:13
поделиться

Вы оставляете их включенными. Если они включены в вашей тестовой и производственной средах, они также должны быть в вашей среде разработки, или вы просто переносите потенциальные проблемы в другую среду, что на самом деле требует больше времени для исправления.

4
ответ дан 18 December 2019 в 05:13
поделиться

Это все равно, что сказать, что «выполнение тестов, которые завершаются неудачно» представляет трудности для команды разработчиков. Весь смысл ограничений заключается в обеспечении действительности и правильности вашей системы.

Найдите время, чтобы разработать необходимую инфраструктуру поддержки для процесса разработки, чтобы упростить добавление и изменение базы данных.

2
ответ дан 18 December 2019 в 05:13
поделиться

Внешние ключи не должны зависеть от кода. Я бы рассмотрел этот глупый совет. Нарушить ссылочную целостность базы данных легко, а разработчики допускают множество ошибок. Точно так же, как разработчик C # ценит безопасность типов, любой, кто занимается разработкой баз данных, оценит защиту ссылочной целостности.

Однако в случае массовых вставок и т. Д., Возможно, будет быстрее отключить ограничения FK, но только после тщательное тестирование с их включенными.

1
ответ дан 18 December 2019 в 05:13
поделиться

У меня всегда включен FK, я понимаю предпосылку аргумента о том, что логика приложения должна обеспечивать соблюдение ограничений данных, а не полагаться на сами ограничения БД, это в сторону, но я не думаю, что я ' d быть первым человеком, который раньше пропустил каскадное ограничение в моей логике приложения, и база данных подобрала это для меня, я полагаю, это очень распространено, и если это подобрано в цикле разработки, это гораздо более удобно, чем в производственная среда!

1
ответ дан 18 December 2019 в 05:13
поделиться

В дополнение ко многим причинам, указанным в других сообщениях, отключение внешних ключей при разработке имеет большой риск того, что вы напишете код, который не будет работать в производственной среде. Например, предположим, что вы создаете строку заказа, прежде чем создавать заказ. Это будет нормально работать без внешних ключей, но не удастся, когда они будут включены.

1
ответ дан 18 December 2019 в 05:13
поделиться

Я рад видеть, что другие ответы почти единодушны в том, что вы должны поддерживать ограничения в своей разработке.

Я бы добавил, что ваш код должен обрабатывать исключения при попытке данных INSERT / UPDATE / DELETE вызывает нарушение ограничения. Вам нужно, чтобы ваш код работал правильно, когда (а не если) это происходит в производственной среде. Таким образом, вы должны включить ограничения во время разработки и тестирования.

1
ответ дан 18 December 2019 в 05:13
поделиться

I'm going to say, let's remove the constraints.

Down with FKs!

and remove all the indices, all other constraints as well.

Just kidding. :)

Of course.. keep it as close to production as possible - scale down the size of the data and please please please SCRUB the data before you distribute it.

0
ответ дан 18 December 2019 в 05:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: