Хорошо ли использовать проверочные ограничения для бизнес-правил?

В настоящее время мы используем проверочные ограничения для реализации бизнес-правил, но я хочу знать, следует ли нам внедрять бизнес-правила в SQL или на уровне бизнес-логики (C#). Я искал в сети и обнаружил, что проверочные ограничения хороши для использования.

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

6 ответов

Решение

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

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

Целостность данных является ключевой; система, которая позволит человеку хранить что-то, что не соответствует бизнес-правилам, в случае обхода приложения, не имеет особой ценности. Это также делает жизнь намного проще, если логика находится в базе данных для ситуаций, когда оригинальное приложение находится на C#, и руководители решили, что рынку нужна версия Java/Ruby/Python/etc.

Да, это хорошо!

Вы должны всегда проверять свои бизнес-правила как в коде приложения (на бизнес-уровне), так и, если возможно, также в своей базе данных.

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

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

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

Не полагайтесь только на свое приложение!

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

Определить строгие бизнес-правила в SQL может быть довольно сложно. Придерживайтесь проверки данных в базе данных и реальных бизнес-правил в вашем приложении.

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

C#. Гораздо проще повторно использовать логику в C#, чем SQL (по моему опыту) и вообще поддерживать.

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

Это дает множество преимуществ: вы можете гарантировать безопасность своих данных, если их изменяет несколько приложений (например, C# приложение + веб-приложение + мобильное приложение...), и это позволяет вам выполнять меньше работы в эти "второстепенные" приложения. Если база данных выполняет всю работу, приложения являются только внешним интерфейсом для базы данных.

В будущем будет проще перенести приложения, но будет сложнее перенести базу данных. Это важное решение.

Зависит от ограничений

  1. Это зависит от ограничений
  2. Вам также следует избегать (если возможно) проверки того же ограничения в двух местах - это будет означать, что в вашей системе есть дублированный код, что приводит к ненужной сложности.

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

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

Другие вопросы по тегам