Вы, очевидно, предполагаете, что CONSTRAINT
s в базе данных должны выполняться приложениями, которые / которые обращаются к этой базе данных?
Есть много причин, почему это плохая (плохая, плохая ...) идея.
1) Если вы создаете «движок ограничений« по собственной инициативе »(то есть в коде своего приложения), то вы просто эмулируете то, что потратили Oracle / SQL Server / MySQL / PostgreSQL / <. Whoever ...> годы написания. Их код CONSTRAINT был протестирован за эти годы буквально миллионами конечных пользователей.
2) При всем уважении к вам и вашей команде, вы не сможете сделать это правильно даже в течение нескольких лет - отсюда только код MySQL стоит 40 миллионов долларов. И MySQL является самым дешевым из 3 серверов выше, и они даже не реализуют ПРОВЕРКИ КОНТРОЛЯ. Очевидно, что получить RI (Referential Integrity) полностью правильно сложно.
Я часто бывал на форумах Oracle и не могу сказать вам, сколько раз какой-нибудь бедный менеджер / программист навязывал ему проект, когда у гения, который работал раньше, была «яркая» идея делать то, что вы предлагаете ,
Джонатан Льюис (он написал книгу на 550 страниц об основах оптимизатора Oracle ) дает «нет». 2 из его Дизайнерских Бедствий в другой книге (« Рассказы о Столе Дуба » - Стола Дуба - группа экспертов Оракула)
- Мы будем проверять целостность данных на уровне приложений, а не использовать возможности проверки ограничений Oracle.
3) Даже если каким - то чудом вы можете правильно реализовать RI, вы должны полностью переопределить его снова и снова для каждого приложения , которое прикасается к этой базе данных - и если ваши данные важны, то новые приложения будут. Выбор этого в качестве парадигмы приведет вас и ваших коллег-программистов (не говоря уже о вспомогательном персонале и отделах продаж) к жизни в постоянном тушении пожаров и страданиях.
Вы можете прочитать больше о том, почему реализация CONSTRAINTs данных на уровне приложений - просто безумие здесь , здесь и здесь .
Чтобы конкретно ответить на ваш вопрос:
Почему они вообще объявлены? Это кажется очень полезным, но действительно ли необходимо иметь базу данных, которая функционирует
Причина того, что KEY
s (либо PRIMARY
, FOREIGN
, UNIQUE
или просто обычные INDEX
адреса) объявляются в том , что, в то время как это не является строго необходимым для базы данных , чтобы иметь их для его функционирования, это абсолютно необходимо , чтобы они были объявлены для него функционировать хорошо .