Ви, очевидно, пропонуєте, що CONSTRAINT
s в базі даних повинен бути застосований додатком (ими), які / які отримують доступ до цієї бази даних?
Є багато причин, чому це погана (погана, погана ...) ідея.
1) Якщо ви будуєте "рулонний" власний "обмежувальний" двигун "(тобто в рамках свого коду програми), ви просто наслідуєте те, на що витратили Oracle / SQL Server / MySQL / PostgreSQL / <. років написання. Їх код CONSTRAINT був перевірений протягом цих років буквально мільйонами кінцевих користувачів.
2) При всій повазі до вас та вашої команди, ви не збираєтеся виправити це навіть за лічені роки - звідси лише MySQL-код коштував 40 мільйонів доларів. І MySQL - найдешевший із трьох вищезгаданих серверів, і вони навіть не реалізують ПРОВЕРКУВАННЯ КОНСТРАНЦІЙ. Очевидно, що отримати правильний RI (Referential Integrity) повністю правильно, важко.
Я часто відвідував форуми Oracle, і я не можу вам сказати, скільки разів якийсь поганий менеджер / програміст наштовхувався на нього, де геній, який мав свою роботу раніше, мав "яскраву" ідею робити те, що ви пропонуєте .
Джонатан Льюїс (він написав книгу на 550 сторінках про основи оптимізатора Oracle ) дає як ні. 2 його дизайнерських катастроф в іншій книзі (" Казки про дубовий стіл " - Дубовий стіл - група експертів Oracle) є
- Ми перевіримо цілісність даних на рівні програми, а не скористаємося можливостями Oracle для перевірки обмежень.
3) Навіть якщо яким - то дивом ви можете правильно реалізувати RI, ви повинні повністю перевизначити його знову і знову для кожної програми , яке торкається до цієї бази даних - і якщо ваші дані важливі, то нові додатки будуть. Вибір цього як парадигма призведе до вас та ваших колег-програмістів (не кажучи вже про персонал підтримки та продажів) до життя постійного пожежогасіння та нещастя.
Ви можете прочитати докладніше про те, чому реалізація даних CONSTRAINT на рівні додатків - це не що інше, як божевілля тут , тут і тут .
Щоб спеціально відповісти на ваше запитання:
Тільки чому вони взагалі декларуються? Це здається дуже корисним, але чи потрібно насправді мати базу даних, яка функціонує
Причина того, що KEY
s (або PRIMARY
, FOREIGN
, UNIQUE
або просто звичайні INDEX
адреси) оголошуються в тому , що, в той час як це НЕ є строго необхідним для бази даних , щоб мати їх для його функціонування, це абсолютно необхідно , щоб вони були оголошені для нього функціонувати добре .