Яку теоретичну основу ви знайшли для дизайну баз даних "Шаблон сховища"? Я не здогадуюсь жодного. Це шар складності, що опирається на фальшиве приміщення: що "шар стійкості" - це те, від чого потрібно бути ізольованим. З того, що я можу сказати, це відіграє до широкого ігнорування програмування принципів реляційного дизайну і покладається на передбачувану центральність дизайну ОО програми. Але це не виправдовує його існування на раціональних, не кажучи вже про теоретичних засадах.
Єдиний вірний шлях до дизайну баз даних не змінився за 30 років: проаналізуйте дані. Знайдіть ключі та обмеження та багато стосунків. Створіть свої столи відповідно до нормальної форми Boyce-Codd. Використовуйте представлення даних і збережені процедури для полегшення доступу до даних.
Незважаючи на це, можливо, SQL СУБД забезпечує кращий рівень ізоляції, ніж все, що може запропонувати програміст. Це правда, що в міру зміни бази даних SQL, який використовується для доступу до неї, можливо, доведеться змінити. Але зауважте, що це правда незалежно від того, є чи є посередницький рівень . Поки додаток використовує представлення даних і збережені процедури для доступу до СУБД, звичайні інженерні засоби SQL вказуватимуть, коли зміни базової бази даних визнають недійсними ці представлення та збережені процедури.
У цьому, звичайно, криється завдання. Посередницький шар забезпечує ілюзію ізоляції та комфорту програмісту написання коду, який він знає, як зробити. Навчання дизайну баз даних та SQL вимагає вивчення чогось нового. Більшість людей скоріше помре, ніж думає, і багатьом це вдається.
Хтось із вашої команди безперечно заперечить, що написання SQL для підтримки ваших 200 класів - це велика робота. Без сумніву. Але принаймні це корисна робота. Якщо ви розробляєте базу даних, наслідуючи свій дизайн OO, ви також зробите багато роботи, багато чого буде марним і переможете більшість того, що пропонує вам СУБД.
Наприклад, ви розмірковуєте відображати Блок роботи в базі даних (як я вважаю, таблицю або таблиці). Одиниця роботи є вбудованої службою СУБД: begin transaction
... оновлення бази ... commit transaction
. Ніщо не моделює, окрім відображення ваших класів у таблиці баз даних у SQL.
Ваше запитання було розміщено 4 роки тому. Я відповідаю, бо нещодавно її "оновили", вказуючи, що хтось все ще цікавить. Я сподіваюся, що моя відповідь спонукає читача застосувати базову теорію реляції до проблеми замість того, щоб приймати безглузде рішення.