Чи погана ідея створювати сторонні ключі на таблицях за різними схемами в одній базі даних для великих додатків?


13

Я працюю над передачею великого веб-додатка pl / sql на виділений сервер. Ця програма розташована в одній схемі з 70 пакетами коду програми. Цей додаток було зроблено приблизно приблизно 15 людей у ​​різні часи. І для нас було звичайною практикою створювати сторонні ключі на довідкових таблицях в різних схемах, оскільки це дійсно зручно і дуже добре зберігає базу даних, тому що нам не потрібно зберігати одні й ті ж таблиці референцій в різних схемах.

Але в будь-якому випадку мій DBA (який створив новий екземпляр з DB і скопіював мою програму всередині зони Solaris) сказав сьогодні дуже суворо: "Зовнішні ключі на різних схемах - це зло, і вам потрібно його знищити!". Він не пояснив свою точку зору.

Це дійсно погана ідея робити це з великими додатками?


13
Ваша DBA повинна бути звільнена.
Colin 't Hart

1
Всі ми будемо кричати, що ваша DBA - дебіл, якщо це все, що вони сказали, але ви впевнені, що не було іншого контексту аргументу вашої DBA?
Керміт

1
можливо, DBA просто робить все можливе, щоб підтримати смішну роботу, яку зробили чорти в конструюванні цієї речі.
swasheck

2
@swasheck З іншого боку, чи хочете ви мати свою роботу після того, як база даних накопичила кілька років невідповідностей відповідно до цієї DBA?
Мерехтіння

@Twinkles зовсім не
swasheck

Відповіді:


6

Зі мною - я родом із SQL Server і ненавиджу оракул, але я думаю, що аргументація все ще стоїть.

Схеми приємно ізолювати таблиці від логічних підсистем. Зовнішні ключі гарантують цілісність даних. Це ортогональні поняття - оскільки очевидно, що цілісність даних між підсистемами також є обов'язковою. Бухгалтерський облік та доставка та, можливо, дані Центрального КУстомера не живуть у силосах, де клієнт може бути видалений під час використання в обліку.

Я вважаю, що вимога DBA є ознакою некомпетентності. Будь-хто може вступити і надати контр-аргумент - я був би радий. Але так я це роблю на SQL Server (хоча, знову ж таки, наше визначення схеми - IIRC МАЛКО, відмінне від визначення oracle).


4

Хоча вимагати знищення іноземних ключових обмежень без детальних міркувань нерозумно, є сенс тримати під контролем зовнішні посилання. Що робити, якщо схеми, на які ви посилаєтесь, названі по-іншому на новому сервері?

В Oracle ви вирішуєте цю проблему, створюючи SYNONYMS для об'єктів, які знаходяться поза поточною схемою.


1
Ви можете зловживати синонімами і ще більше каламутити питання "на що це стосується?". Дивіться тут для більш докладної інформації про безпеку, продуктивності і кращі практики stackoverflow.com/a/10042117/851930
kevinsky

3
Синоніми не можна використовувати як ціль зовнішніх ключових обмежень.
Colin 't Hart

Дійсні бали. І ще один доказ того, що робити висловлювання, не даючи можливість іншим аргументувати достоїнства та небезпеки, є поганим.
Мерехтіння

2

Якщо у вас є потреба (простір / безпека / що завгодно) перенести будь-яку схему в іншу базу даних, ви більше не зможете обробляти посилання. Це, мабуть, головна причина вимагати вбивства посилань.


0

Єдина «погана ідея», яку я можу собі уявити, виконуючи це, - це те, що ви не можете надати привілею об'єкта REFERENCES (потрібному для створення обмеження, яке стосується таблиці) для ролі. Мені потрібно зробити схему / користувача за схемою / користувачем.

Крім того, я не бачу сенсу вашої DBA.


0

Подумайте лише про це: Схема власника дочірньої таблиці починає створювати запис у своїй таблиці і несвідомо перешкоджає користувачу схеми батьківської таблиці видаляти записи з батьківської таблиці. Це щось, що він передбачає і цінує?

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.