Предисловие | 5 |
|
I. Основы проектирования | 15 |
|
1. Введение | 17 |
Что такое проектирование? | 17 |
Исследование проблемы | 19 |
Определение стратегии | 19 |
Анализ | 21 |
Проектирование | 24 |
Реализация | 27 |
Проект успешно завершён? | 28 |
Альтернативные методы и подходы | 30 |
Moscow-анализ | 32 |
Планирование этапа проектирования | 33 |
Перепланирование | 34 |
Задачи проектирования | 35 |
Проектирование: ранние стадии | 35 |
Проектирование базы данных | 42 |
Проектирование процессов и кода | 44 |
Заключительные стадии проектирования | 46 |
|
2. Почему проектирование так важно для Oracle | 50 |
Проектирование в расчете на конкретную архитектуру | 51 |
Клиент/сервер | 51 |
Распределённые базы данных | 52 |
Хранилища данных | 53 |
Параллельная обработка | 54 |
Обеспечение высокой производительности | 55 |
Ключи и индексы | 56 |
Денормализация | 56 |
Выбор оптимизатора | 57 |
Методы программирования | 57 |
Другие факторы, которые нужно учитывать при проектировании | 58 |
Очень большие базы данных | 58 |
Временные ряды (временные данные) | 58 |
Стыковка с другими системами | 59 |
Проектирование для Oracle7 | 59 |
Версия 7.0 | 61 |
Версия 7.1 | 64 |
Версия 7.1.6 | 67 |
Версия 7.2 | 68 |
Версия 7.3 | 70 |
Об Oracle8 | 73 |
Секционирование | 74 |
Совместимость с Oracle7 | 74 |
Но... | 75 |
|
3. Моделирование данных | 76 |
Типы моделей | 77 |
Что такое моделирование данных? | 78 |
Сущности, атрибуты и ключи | 79 |
Отношения | 79 |
Подтипы и супертипы | 80 |
Диаграммы «сущность-отношение» | 81 |
Изображение сущностей и атрибутов | 81 |
Изображение отношений | 82 |
Изображение подтипов и супертипов | 83 |
Изображение отношений «многие ко многим» | 83 |
Изображение «свиных ушей» | 85 |
Контроль качества концептуальной информационной модели | 85 |
Нормализованная модель данных | 86 |
Недопустимые и необычные структуры в информационной модели | 96 |
Облава на потерянную дугу | 105 |
Жизненные циклы сущностей и диаграммы потока данных | 109 |
Жизненные циклы сущностей | 109 |
Диаграммы потока данных | 112 |
Проектирование, управляемое данными, и метамодели | 114 |
|
II. Проектирование базы данных | 117 |
|
4. Принятие решения о денормализации | 119 |
Денормализация: что, зачем и когда? | 119 |
Нисходящая денормализация | 121 |
Восходящая денормализация | 122 |
Методы реализации денормализации | 123 |
Другие способы осуществления денормализации | 125 |
Внутритабличная денормализация | !25 |
Денормализация методом «разделяй и властвуй» | 127 |
Денормализация методом слияния таблиц | 129 |
|
5. Выбор типов данных, неопределённые значения | 131 |
Типы данных | 132 |
Числовые данные | 133 |
Целые и вещественные значения | 133 |
Строки цифр | 134 |
Дата и время | 135 |
Строковые данные | 138 |
Текст в свободной форме | 139 |
Неструктурированные данные и BLOB | 140 |
Другие типы данных | 141 |
Неопределённые значения | 143 |
Смысл неопределённого значения | 143 |
Некоторые особенности использования неопределённых значений | 145 |
Рекомендации по использованию неопределённых значений | 149 |
|
6. Выбор ключей и индексов | 150 |
Первичные ключи | 151 |
Исследование синтетических, или суррогатных, ключей | 152 |
Неуникальные (или почти уникальные) ключи | 153 |
Замена длинных каскадных ключей суррогатными | 155 |
Другие ключи | 161 |
Возможные ключи | 161 |
Внешние ключи | 162 |
Индексы: обзор | 162 |
Как работает индекс? | 163 |
Почему бы не индексировать все? | 166 |
Типы индексов и методы индексирования | 167 |
Индексы, имеющие структуру В*-дерева | 167 |
Отключение индексов | 170 |
Составные индексы | 172 |
Выбор оптимизатора | 174 |
Проблема связанной переменной | 177 |
Хеш-ключи | 178 |
Индексные кластеры | 181 |
|
7. Обработка временных данных | 184 |
Проблема временных данных | 184 |
Использование специальных процессоров | 185 |
Пример с временными данными | 186 |
Вопросы проектирования временных баз данных | 188 |
Точность представления даты | 188 |
Необходимы ли две даты? | 189 |
Как обозначать открытость диапазона — большими или неопределёнными значениями? | 190 |
Можно ли использовать первичный ключ для таблицы с временными данными? | 193 |
Допускать ли перекрытия и разрывы по дате? | 197 |
Использовать ли отдельную таблицу для архивных данных? | 201 |
Как насчёт внешних ключей? | 204 |
Что делать с проверкой по двум диапазонам? | 208 |
Временные данные: резюме | 210 |
|
8. Загрузка и выгрузка данных | 211 |
Работа с внешними системами | 211 |
Типы интерфейсов | 212 |
Задачи проектировщика | 212 |
Работая вместе с «противоположной стороной» | 213 |
Вопросы совместимости данных | 214 |
Обработка неочищенных данных | 214 |
Загрузка устаревших кодов | 215 |
Загрузка данных с нарушенной ссылочной целостностью | 216 |
Загрузка данных, не удовлетворяющих ограничениям сущностей | 218 |
Загрузка неопределённых значении | 218 |
Мы — за разумный подход | 219 |
Триггеры и декларативные ограничения | 219 |
Ослабление ограничений Foreign Key с помощью неопределённых значений | 220 |
Этапы переноса данных | 221 |
Трансформация данных | 224 |
Форматы файлов | 227 |
Упорядочение, восстановление и частота фиксации | 229 |
Использование SQL*Loader | 229 |
Сравнение SQL*Loader и 3GL | 230 |
Сильные и слабые стороны SQL*Loader | 230 |
Из Oracle7 в Oracle7: особый случай | 232 |
Выходные данные | 233 |
|
9. Размещение и хранение объектов | 235 |
Размещение объектов | 23о |
Определение размеров объектов | 238 |
Определение размеров таблиц | 238 |
Определение размеров сегментов отката | 238 |
Определение объёмов памяти и SGA | 239 |
Задание параметров хранения | 240 |
INITIAL и NEXT | 241 |
MAXEXTENTS и MINEXTENTS | 241 |
FREELISTS и FREELIST GROUPS | 241 |
PCTFREE и PCTUSED | 241 |
Создание скриптов | 243 |
Планирование реализации | 244 |
|
10. Защита данных | 245 |
Архивация | 246 |
Варианты архивации | 247 |
Как архивировать? | 250 |
Когда архивировать? | 251 |
Куда архивировать — в файл или в таблицу? | 252 |
Если вы передумали, то можно ли вернуть архивные данные обратно? | 252 |
Рекомендации по архивации | 253 |
Аудит | 253 |
Что содержит журнал аудита? | 254 |
Простейшая форма журнала аудита | 254 |
Использование средств аудита Oracle7 | 256 |
Углубленный аудит с помощью триггеров | 258 |
Альтернативный подход | 261 |
Советы по аудиту | 262 |
Безопасность | 263 |
Безопасность доступа | 264 |
Безопасность данных | 268 |
Резервное копирование | 275 |
Стратегия резервного копирования | 275 |
Создание образа базы данных | 277 |
Экспортирование и импортирование | 279 |
Режим архивации журналов | 280 |
Резервные узлы | 282 |
Резервное копирование: резюме | 283 |
|
III. Проектирование под конкретные архитектуры | 285 |
|
11. Проектирование для архитектур клиент/сервер | 287 |
Почему клиент/сервер? | 288 |
Что такое архитектура клиент/сервер? | 289 |
Об аппаратных средствах | 291 |
Основные задачи проектирования для архитектур клиент/сервер | 292 |
Проектирование для архитектур клиент/сервер | 293 |
Модель рабочей нагрузки в архитектуре клиент/сервер | 294 |
Важность «тонких клиентов» | 295 |
Основы SQL*Net | 297 |
Анатомия SQL-предложения | 298 |
Появляется промежуточное звено | 301 |
Приёмы проектирования для архитектур клиент/сервер | 303 |
Кэширование неизменяемых данных на клиенте | 303 |
Клиент/сервер и распределённые базы данных | 306 |
Появление базы данных второго уровня | 307 |
Сокращение сетевого трафика с помощью представлений | 309 |
Оптимизация представлений | 312 |
Проверка данных в среде клиент/сервер | 315 |
Который час? | 318 |
|
12. Проектирование для распределённых баз данных | 320 |
Когда использовать распределённые базы данных? | 320 |
Эволюция средств поддержки распределения данных Oracle | 322 |
Каналы связи базы данных | 323 |
Распределённые соединения | 324 |
Удалённое обновление | 326 |
Двухфазная фиксация | 327 |
Средства распределения данных Oracle7 | 327 |
Шесть свойств сущностей, которые важны для обеспечения распределения данных | 328 |
Выбор стратегии распределения данных | 334 |
Подробнее о двухфазной фиксации | 336 |
Удаленные DML-операции | 338 |
Синхронные удалённые вызовы процедур (RPC) | 338 |
Снимки | 340 |
Неограниченное число триггеров на одной таблице | 344 |
Асинхронные удалённые вызовы процедур | 344 |
Асинхронная симметричная репликация | 345 |
Синхронная симметричная репликация | 348 |
Комбинирование и сопоставление методов | 349 |
Примерные сценарии | 350 |
Сценарий 1 | 351 |
Сценарий 2 | 351 |
Сценарий 3 | 352 |
Сценарий 4 | 352 |
Сценарий 5 | 353 |
Использование распределённых баз данных для перехода в аварийный режим | 354 |
Другие факторы, влияющие на проектирование | 354 |
Столбцы типа LONG | 354 |
Пакетные обновления | 355 |
Распределение данных: резюме | 355 |
|
13. Проектирование для хранилищ данных | 357 |
Почему хранилища данных? | 357 |
Что такое хранилище данных? | 359 |
Многомерные и пространственные модели | 362 |
Что отличает хранилище данных? | 363 |
Проблемы проектирования | 365 |
Достижения Oracle в технологии хранилищ данных | 367 |
Не забывайте об осторожности | 368 |
Вопросы проектирования для хранилищ данных | 370 |
Многомерное моделирование и звездообразные схемы | 370 |
Факты и измерения | 370 |
Звездообразная схема: пример | 374 |
Развертывание измерений | 376 |
Секционирование | 377 |
Правила агрегирования | 379 |
Объединение таблиц фактов | 382 |
Извлечение и загрузка данных | 382 |
Этап 1: Чтение данных | 382 |
Этап 2: Фильтрация данных | 384 |
Этап 3: Предотвращение потерь ретроспективных данных | 384 |
Этап 4: Обработка данных | 385 |
Этап 5: Перемещение данных | 386 |
Этап 6: Загрузка данных в хранилище | 386 |
Этап 7: Сортировка отклоненных записей | 386 |
Этап 8: Создание агрегированных значений | 387 |
Этап 9: Верификация | 387 |
Метаданные | 388 |
Типы и методы трансформации данных | 389 |
Закодированные значения | 389 |
Флаги а многоязычных системах | 390 |
Манипулирование числовыми данными | 390 |
Манипулирование датами | 390 |
Преобразование и слияние ключей | 390 |
Выборка данных путём исследования и с помощью OLAP-инструментов | 391 |
|
14. Проектирование для параллельной обработки | 393 |
Зачем нужен параллелизм? | 394 |
Стрипинг | 396 |
Технология RAID, зеркальное копирование и производительность | 399 |
Проектирование с целью обеспечения параллелизма | 399 |
Создание и сопровождение индексов | 400 |
Пакетная обработка | 401 |
Анализ ситуации: Oracle Payroll | 404 |
Parallel Query Option (PQO) | 406 |
Достоинства и недостатки PQO | 406 |
Где устанавливать степень параллелизма? | 408 |
PQO: выводы | 409 |
Oracle Parallel Server (OPS) | 409 |
Симметричные многопроцессорные системы (СМП-системы) | 410 |
Системы с массовым параллелизмом: попытка изменить правила | 414 |
OPS: выводы | 416 |
|
IV. Проектирование модулей кода | 417 |
|
15. Введение в проектирование кода | 419 |
Результаты анализа | 420 |
Иерархии функций | 420 |
Определения функций | 422 |
Другие результаты анализа | 423 |
Отображение функций в модули | 423 |
Не забудьте о системных модулях | 425 |
Управление приложениями | 428 |
Управление исходным кодом и версиями | 429 |
Управление базой данных | 429 |
Управление исходным кодом | 430 |
Шаблоны кода | 432 |
Проектирование процесса тестирования | 433 |
Разработка стратегии тестирования | 433 |
Разработка вспомогательных средств тестирования | 434 |
Использование CASE-средств | 434 |
|
16. Где разместить логику обработки? | 437 |
Правила для данных, процессов и интерфейса | 437 |
Группы правил | 438 |
Подготовка и утверждение документации | 443 |
Размещение логики | 444 |
Что куда идёт? | 444 |
Дублирование | 444 |
Вопросы блокировки | 446 |
Трёхуровневые архитектуры | 448 |
Повышенные требования к связываемости | 449 |
|
17. Метрики, макеты и спецификации | 450 |
Разработка метрик проектирования и генерации модулей | 451 |
Изгнание мегамодулей | 453 |
Пакетная обработка | 454 |
Отчёты | 455 |
Оперативные приложения | 455 |
Следует ли выполнять макетирование? | 456 |
Макетирование средствами УРП | 456 |
Макетирование при разработке без использования средств УРП | 458 |
Где мои спецификации? Принципы разработки спецификаций модулей | 460 |
Описание экранных форм и отчётов | 463 |
Описание пакетных процессов | 463 |
|
18. Блокировка | 465 |
Стратегии блокировки | 465 |
Поздняя блокировка | 466 |
Использование сегментов отката транзакции | 467 |
Внешние ключи | 468 |
Взаимоблокировки | 469 |
Сериализация | 470 |
Другие вопросы проектирования | 470 |
Пользовательские блокировки | 470 |
Эффективность блокировок: очистка блоков и блокировки на уровне таблиц | 471 |
|
19. Выбор инструментальных средств | 474 |
Типы инструментальных средств | 474 |
Какие критерии отбора важны? | 475 |
Инструментальные средства для систем клиент/сервер | 477 |
Проектирование для World Wide Web | 480 |
|
20. Экранные формы, отчёты и пакетные программы | 481 |
Проектирование экранных форм | 481 |
Проектирование отчётов Проектирование пакетных программ | 487 |
Регистрации хода выполнения задания | 488 |
Выбор инструментального средства | 491 |
Использование обработки при смене объекта операции | 493 |
Интервал фиксации | 493 |
Делать всё там, где нужно | 495 |
Обработка ошибок | 496 |
Навигация | 499 |
Оперативная справочная система | 500 |
|
V. Приложения | 503 |
|
А. Готовые пакеты прикладных программ | 505 |
Оценка пакета Подходит ли пакет? | 506 |
Аппаратные средства и операционная система | 507 |
Взаимодействие с другими приложениями | 508 |
Функции системной поддержки | 511 |
Можно ли адаптировать пакет? | 511 |
Проблема больших моделей данных | 513 |
|
Б. Секреты мастерства | 516 |
Проблема мутирующих таблиц | 516 |
Проблема тысячелетия: перспектива для Oracle | 524 |
Предыстория | 524 |
Можно ли решить проблему непосредственно в базе данных? | 527 |
Поиск начинается | 529 |
Устраняем проблему | 530 |
Автоматизация процесса исправления кода | 530 |
Тестирование | 531 |
Универсальное решение | 532 |
Выводы | 532 |
Обеспечение расширяемости | 533 |
Когда рассматривать возможность расширяемости | 533 |
Типы расширяемости | 534 |
Расширяемость, управляемая данными | 534 |
Расширяемость, управляемая представлениями | 538 |
Расширяемость, управляемая процедурами и функциями | 539 |
Традиционный подход | 540 |
Расширяемость: заключение | 540 |
|
Предметный указатель | 543 |