Безопасность систем баз данных

Безопасность систем баз данных

7 Лекция: Нормализация. Связывание таблиц (связь один ко многим). Внешние ключи. Ограничение доступа к таблицам.

  • Реляционные базы данных (http://ru.wikipedia.org/wiki/Реляционная_база_данных).
  • Язык SQL (http://ru.wikipedia.org/wiki/SQL).
  • Нормальная форма (http://ru.wikipedia.org/wiki/Нормальная_форма).

Нормальная форма

свойство отношения (связи) в реляционной модели данных, характеризующее его с точки зрения избыточности (повторяются одни и те-же данные ), потенциально приводящей к логически ошибочным результатам выборки или изменения данных.

Процесс преобразования отношений базы данных к виду, отвечающему нормальным формам, называется нормализацией.

Преимущества которые дает нормализация:

  • Уменьшение записей в таблицах (экономия места на диске)
  • Построение логической структуры, вместо большой таблицы, создаются небольшие таблицы связанные между собой.
  • Более удобное управление доступом (например: оператору можно дать доступ только к его таблице).

Первые три нормальные формы (кратко):

  • 1 НФ - оставляют только одно значение в строке для каждого столбца.
  • 2 НФ - оставляют только столбцы функционально зависимые от потенциального составного ключа целиком, а не от части ключа.
  • 3 НФ - оставляют только столбцы напрямую функционально зависимые от потенциального ключа.

Приведение к 1 НФ:

Не приведенная таблица (исходная)

Организация Город Адрес email WWW Вид Конт. лица Поршневой з-д Казань Ул. 2-я Кольцевая, 17 info@plunger.ru www.plunger.ru Поставщик Иванов, зам. дир., тел (3254)76-15-95Петров, нач. отд. сбыта, тел (3254)76-15-35 ООО Вымпел Курск Ул. Гоголя, 25 pennon@mail.ru Клиент Сидоров, директор, тел. (7634)66-65-38 ИЧП Альфа Казань Ул. Пушкинская, 37, оф. 565 alpha323@list.ru Клиент Васильев, директор, тел (3254)74-57-45

Устраняем проблему множества значений в первой строке "Иванов И.И., зам. дир., тел (3254)76-15-95" и "Петров П.П., нач. отд. сбыта, тел (3254)76-15-35".

Проблема в том, что, например, при удалении одного контактного лица из двух, нужно писать специальный код для этого.

Разбиваем на отдельные строки.

Организация Город Адрес email WWW Вид Конт. лица Поршневой з-д Казань Ул. 2-я Кольцевая, 17 info@plunger.ru www.plunger.ru Поставщик Иванов, зам. дир., тел (3254)76-15-95 Поршневой з-д Казань Ул. 2-я Кольцевая, 17 info@plunger.ru www.plunger.ru Поставщик Петров, нач. отд. сбыта, тел (3254)76-15-35 ООО Вымпел Курск Ул. Гоголя, 25 pennon@mail.ru Клиент Сидоров, директор, тел. (7634)66-65-38 ИЧП Альфа Казань Ул. Пушкинская, 37, оф. 565 alpha323@list.ru Клиент Васильев, директор, тел (3254)74-57-45

Теперь удаляется просто строка.

Устраняем проблему множества значений в ячейках последнего столбца (ФИО должность и телефон) "Иванов И.И.", "зам. дир." "тел (3254)76-15-95".

Проблема в том, что, например, при изменении одного из трех, нужно писать специальный код для этого.

Разбиваем на отдельные столбцы.

Организация Город Адрес email WWW Вид Должность Фамилия Код города Тел. Поршневой з-д Казань Ул. 2-я Кольцевая, 17 info@plunger.ru www.plunger.ru Поставщик зам. дир. Иванов 8432 76-15-95 Поршневой з-д Казань Ул. 2-я Кольцевая, 17 info@plunger.ru www.plunger.ru Поставщик нач. отд. сбыта Петров 8432 76-15-35 ООО Вымпел Курск Ул. Гоголя, 25 pennon@mail.ru Клиент директор Сидоров 7634 66-65-38 ИЧП Альфа Казань Ул. Пушкинская, 37, оф. 565 alpha323@list.ru Клиент директор Васильев 8432 74-57-45

Таблица приведена к 1НФ.

Но повторяющиеся значения в таблице, являются потенциальным источником проблем.

1) при вводе их значений легко ошибиться. Например, ошибиться всего одну букву в поле "Город", "Казань" и "казань" это разные города, а некоторые могут и "Kazan" и "kazan" написать. В ранних версиях сайта "Одноклассники" так и было.

2) название города или улицы может измениться, Тогда придется изменять все записи.

3) не эффективное использование диска. Много раз повторяются одни и те же: Города, улицы и т.д.

Приведение к 2 НФ:

Находится в 1НФ, и при этом все неключевые атрибуты зависят только от потенциального составного ключа целиком, а не от его части.

Предположим, что наименование предприятия является уникальным в каждом городе, но в разных городах названия могут совпадать. Предприятие определяется потенциальным ключом "Организация+Город".

Приведем таблицу к 2НФ.

"Код города" зависит от самого города, но не от названия предприятия.

"Код города" повторяется много раз, это избыточность.

Устранить эту избыточность можно выведя "Код города" в отдельную таблицу:

Организация Город Адрес Эл. почта WWW Вид Должность Ф.И.О. Тел. Поршневой з-д Казань Ул. 2-я Кольцевая, 17 info@plunger.ru www.plunger.ru Поставщик зам. дир. Иванов И.И. 76-15-95 Поршневой з-д Казань Ул. 2-я Кольцевая, 17 info@plunger.ru www.plunger.ru Поставщик нач. отд. сбыта Петров П.П., 76-15-35 ООО Вымпел Курск Ул. Гоголя, 25 pennon@mail.ru Клиент директор Сидоров С.С. 66-65-38 ИЧП Альфа Казаньр Ул. Пушкинская, 37, оф. 565 alpha323@list.ru Клиент директор Васильев В.В. 74-57-45

Город Код города Казань 8432 Курск 7634

Кроме этого такое разделение позволяет повысить безопасность данных. Т.к. доступ оператору для внесения кодов городов можно дать только к таблице с кодами, а клиентам не надо вводить код города, что исключает ошибки при вводе.

Приведение к 3 НФ:

Находится в 2НФ, и оставляют только столбцы напрямую функционально зависимые от потенциального ключа, и необходимо устранить функциональные зависимости между неключевыми атрибутами отношения.

Присутствует функциональная зависимость между неключевыми атрибутами "Ф.И.О.", "Тел.", от ключа они зависят через "Должность".

"Должность" и связанные с ней атрибуты вынесем в отдельную таблицу.

Первая из них хранит информацию о самом предприятии:

Организация Город Адрес Эл. почта WWW Вид Поршневой з-д Казань Ул. 2-я Кольцевая, 17 info@plunger.ru www.plunger.ru Поставщик ООО Вымпел Курск Ул. Гоголя, 25 pennon@mail.ru Клиент ИЧП Альфа Казань Ул. Пушкинская, 37, оф. 565 alpha323@list.ru Клиент

Вторая таблица хранит "Должность" на предприятии и связанные с ней атрибуты:

Организация Город Ф.И.О. Должность Тел. Поршневой з-д Казань Иванов И.И. зам. дир. 76-15-95 Поршневой з-д Казань Петров П.П., нач. отд. сбыта 76-15-35 ООО Вымпел Курск Сидоров С.С. директор 66-65-38 ИЧП Альфа Казань Васильев В.В. директор 74-57-45

Связывание двух таблиц (связь один ко многим).

Т.к. таблицу при нормализации разбивают на несколько таблиц, необходимо связать данные этих таблиц.

📎📎📎📎📎📎📎📎📎📎