- •Шехтман в. Е.
- •1. Базы данных и модели данных
- •1.1. Введение.
- •1.2. Файлы операционной системы
- •1.3. Пример базы данных.
- •1.4. Иерархическая модель данных
- •1.5. Сетевая модель данных
- •1.6. Инвертированные списки.
- •2. Введение в реляционную модель данных.
- •1.7. Реляционная модель данных
- •3. Реляционная алгебра
- •3.1. Теоретико-множественные операции.
- •3.2. Специальные операции ra
- •4. Нормализация данных
- •4.1. Полная декомпозиция.
- •Магазин товар ндс
- •Товар ндс
- •Магазин ндс
- •Товар ндс
- •Магазин товар ндс
- •4.2. Проблема дублирования данных.
- •1 Глобус 33-33-33
- •2 Глобус 33-33-33
- •4 Океан 77-77-77
- •4.3. Висячие записи.
- •Поставщик Тел
- •4.4. Проблемы, возникающие из-за неудачной структуры данных.
- •4.5. Пятая нормальная форма (5нф).
- •4.6. Функциональная зависимость.
- •4.7. Связь между фз и полной декомпозицией отношения.
- •4.8. Первая нормальная форма (1нф).
- •4.9. Вторая нормальная форма (2нф).
- •4.10. Третья нормальная форма (3нф).
- •4.11. Нормальная форма Бойса-Кодда (нфбк).
- •4.12. Многозначная зависимость.
- •4.13. Четвертая нормальная форма (4нф).
- •4.14. Пример нормализации.
- •4.15. Резюме. Нормальные формы.
- •5. Инфологическое моделирование.
- •5.1. Сущность и набор сущностей
- •5.2. Связи между сущностями.
- •5.3. Рекурсивная связь. Роли.
- •5.4. Множественные связи.
- •5.5. Суперсущности и производные сущности
- •5.6. Слабые наборы сущностей
- •5.7. Борьба с избыточнотью
- •5.8. Преобразование инфологической модели в физическую модель.
- •5.9. Пример инфологического моделирования.
- •6. Язык sql
- •6.1. История sql.
- •6.2. Структура sql.
- •6.3. Язык запросов
- •6.4. Простые запросы на выборку данных.
- •6.5. Агрегатные (групповые) функции.
- •6.6. Вложенные запросы
- •6.7. Внешние объединения
- •6.8. Изменение данных
- •Insert into r1 (o, fio, d) values (5, ‘Иванов’, ’бд’)
- •7. Представления.
- •8. Определение схемы базы данных и ограничений целостности
- •9. Транзакции
- •9.1. Свойства транзакций
- •9.2. Надежное хранение данных
- •9.3. Параллельное выполнение транзакций
- •9.3.1. Коллизия “пропавшие изменения” - lost update problem
- •9.3.2. Коллизия “промежуточные данные” - dirty read
- •9.3.3. Коллизия “Несогласованные данные” - unrepeatable read, inconsistent analysis
- •9.3.4. Коллизия “фантом” - phantom
- •9.4. Уровни изолированности
- •9.5. Тупики
- •10. Ограничение прав доступа в целях обеспечения безопасности
- •11. Физическая организация баз данных
- •11.1. Организация размещения данных.
- •11.2. Организация индексов
- •11.2.1. Поиск в бд.
- •11.2.2. Плотный индекс (индексно-прямые файлы).
- •11.2.3. Неплотный индекс (индексно-последовательные файлы).
- •11.2.4. Сбалансированные деревья.
- •11.2.5. Инвертированные списки.
- •12. Архитектура субд. Методы оптимизации запросов.
- •Логические преобразования запросов.
- •Преобразования запросов с изменением порядка реляционных операций.
- •13. Аналитические системы.
- •Анализ данных.
- •Хранилища данных
- •Типы ошибок
- •Способы реализации olap.
- •Требования к средствам реализации систем оперативной и аналитической обработки данных
- •Многомерная модель данных.
- •Разработка данных
- •14. Загружаемые процедуры.
- •In pr double precision)
- •If eof then leave Cl end if;
- •Insert into providers(code, name)
- •Values (nr.Codec, ‘*** новый поставщик ***’);
- •15.4. Модель сервера приложений (трёхзвенная архитектура, “тонкий клиент”)
- •Список литературы
- •15. Модели совместного доступа к бд
- •15.1. Файл-серверная модель.
- •15.2. Модель клиент-сервер с бизнес-логикой на клиенте.
- •15.3. Модель клиент-сервер с бизнес-логикой на сервере субд (хранимые процедуры и триггеры) и частично на клиенте.
5.6. Слабые наборы сущностей
Случается, что набору сущностей для уникальной идентификации конкретной сущности (объекта) требуется “помощь”. Горорят, что набор сущностей слабый (или подчиненный), если для уникальной идентификации объекта из этого набора требуется включить в него ключ другого, связанного с ним набора сущностей. Табельный номер сотрудника может в определенных условиях однозначно определить объект набора сущностей Сотрудники (а именно, если в этом наборе сущностей хранятся данные о сотрудниках только одного предприятия). Однако если мы в наборе сущностей Сотрудники захотим хранить данные о сотрудниках нескольких предприятий, то табельный номер перестает быть ключом. Но табельный номер вместе с именем предприятия, на котором работает сотрудник, уже образуют ключ.
Рисунок 9. Подчиненный набор сущностей Сотрудники.
5.7. Борьба с избыточнотью
При проектировании структур данных следует избегать ситуации, когда один факт выражается двумя разными способами. Будем называть это избыточностью. Избыточность может привести к несогласованности данных и к перерасходу пространства на диске.
Рисунок 10 Пример отсутсвия избыточности.
На рис.10 каждый поставщик присутствует лишь однажды – это приемлемое решение. На рис.11 поставщик упоминается дважды – как атрибут набора сущностей Товар и как связанная сущность из набора сущностей Поставщики. Это пример плохой структуры данных.
Рисунок 11. Пример избыточности (плохое решение).
На следующем рис.12 представлено еще одно неудачное решение: для каждого товара повторяется его поставщик и адрес поставщика. Кроме того, если товар еще не поставлялся, не удастся зафиксировать имя и адрес поставщика в такой базе данных.
Рисунок 12. Еще одно плохое решение.
Можно задаться вопросом: что лучше – создавать набор сущностей или создавать дополнительные атрибуты в исходном наборе сущностей? Ответ зависит от нескольких факторов. Во первых, набор сущностей должен представлять нечто большее, чем просто имя сущностей, т. е. иметь не только ключевые поля. Во вторых, набор сущностей должен играть роль стороны “многие” в связи типа “один ко многим” или “многие ко многим”. Достаточно выполнения одного из условий. Возвращаясь к рис. 8 можно сказать:
Поставщики стоит выделить в набор сущностей, т. к. каждая сущность имеет неключевой атрибут Адрес.
Товары стоит выделить в набор сущностей, потому что они находятся на стороне “многие” в отношении “один ко многим”. По этой причине их стоило бы выделить в отдельный набор сущностей, даже если бы не было неключевого атрибута НДС.
Предположим, что нас не интересуют подробности, связанные с поставщиком. Тогда на рис.13 представлено приемлемое решение – нет необходимости создавать отдельный набор сущностей Поставщик т. к. нам, по смыслу задачи, не надо хранить какую-либо характеристику поставщика, кроме его имени.
Рисунок 13 Пример приемлемого решения
В этих условиях решение, представленное на рис.14 может оказаться неприемлемым. Хотя однозначно этого утверждать нельзя – все решают требования и характер использования данных.
Рисунок 14 Пример неоднозначного решения
Говоря в общем, не стоит всегда создавать отдельные наборы сущностей. Зачастую можно обходиться без них. Не стоит злоупотреблять слабыми наборами сущностей. Зачастую можно использовать собственные (естественные) ключи – ИНН, государственный номер автомобиля, а можно и искусственный ключ (например, поле типа Счетчик в СУБД Microsoft Access).
