что такое нормальная форма для чего она нужна
Нормализация баз данных простыми словами
Приветствую всех посетителей сайта Info-Comp.ru! Сегодня мы с Вами поговорим о нормализации базы данных, узнаем, что это такое, какие нормальные формы базы данных существуют и зачем вообще проводить нормализацию базы данных.
Постоянные посетители данного сайта знают, что я здесь публикую достаточно много различных материалов, связанных с языком SQL и системами управления базами данных, однако статей, связанных с теорией баз данных, на текущий момент, к сожалению, нет, поэтому я решил это исправить, и начать цикл статей, посвященных теории баз данных.
Начну я с нормализации баз данных. В этом материале мы поговорим в целом о процессе нормализации, узнаем, зачем проводить нормализацию базы данных, что такое нормальная форма базы данных, а также какие нормальные формы существуют. В следующих материалах я подробно и с примерами расскажу про каждую нормальную форму.
Реляционная база данных
В целом под базой данных можно понимать любой набор информации, которую можно найти в этой базе данных и воспользоваться ей, однако если говорить в контексте SQL, то речь будет идти, конечно, о реляционных базах данных, а что же это такое?
Реляционная база данных – это упорядоченная информация, связанная между собой определёнными отношениями.
Логически такая база данных представлена в виде таблиц, в которых и лежит вся эта информация.
Примечание! Если Вас интересует язык SQL, рекомендую пройти мой онлайн-курс по основам SQL, который ориентирован на изучение SQL как стандарта, таким образом, Вы сможете работать в любой системе управления базами данных. Курс включает много практики: онлайн-тестирование, задания и многое другое.
Нормализация баз данных
В реляционных базах данных есть такое понятия, как «Нормализация».
Нормализация – это процесс удаления избыточных данных.
Также нормализацию можно рассматривать и с позиции проектирования базы данных, в таком случае мы можем сформулировать определение нормализации следующим образом.
Нормализация – это метод проектирования базы данных, который позволяет привести базу данных к минимальной избыточности.
Избыточность устраняется, как правило, за счёт декомпозиции отношений (таблиц), т.е. разбиения одной таблицы на несколько.
Зачем нормализовать базу данных?
У Вас может возникнуть вопрос – а зачем вообще нормализовать базу данных и бороться с этой избыточностью?
Дело в том, что избыточность данных создает предпосылки для появления различных аномалий, снижает производительность, и делает управление данными не гибким и не очень удобным. Отсюда можно сделать вывод, что нормализация нужна для:
Теперь давайте поговорим о самой избыточности данных, что же это такое.
Избыточность данных – это когда одни и те же данные хранятся в базе в нескольких местах, именно это и приводит к аномалиям.
Так как в этом случае необходимо добавлять, изменять или удалять одни и те же данные в нескольких местах. Например, если не выполнить операцию в каком-нибудь одном месте, то возникает ситуация, когда одни данные не соответствуют вроде как точно таким же данным в другом месте.
Давайте рассмотрим пример. Допустим, у нас есть следующая таблица, она хранит информацию о предметах мебели, в частности наименование предмета и материал, из которого изготовлен этот предмет.
Идентификатор предмета | Наименование предмета | Материал |
1 | Стул | Металл |
2 | Стол | Массив дерева |
3 | Кровать | ЛДСП |
4 | Шкаф | Массив дерева |
5 | Комод | ЛДСП |
А теперь допустим, что у нас возникла необходимость подкорректировать название материала, вместо «Массив дерева» нужно написать «Натуральное дерево», и чтобы это сделать нам необходимо внести изменения сразу в несколько строк, так как предметов, изготовленных из массива дерева, несколько, а именно 2: стол и шкаф.
А теперь представьте, что по каким-то причинам мы внесли изменения только в одну строку, в итоге в нашей таблице будет и «Массив дерева», и «Натуральное дерево».
Идентификатор предмета | Наименование предмета | Материал |
1 | Стул | Металл |
2 | Стол | Натуральное дерево |
3 | Кровать | ЛДСП |
4 | Шкаф | Массив дерева |
5 | Комод | ЛДСП |
Какое из этих названий будет правильным? А если представить, что мы можем внести еще какое-то новое значение при добавлении новых записей, например, просто «Дерево».
В этом случае в нашей таблице в скором времени будет и «Массив дерева», и «Натуральное дерево», и просто «Дерево», и вообще, что угодно, ведь это просто текст.
Идентификатор предмета | Наименование предмета | Материал |
1 | Стул | Металл |
2 | Стол | Натуральное дерево |
3 | Кровать | ЛДСП |
4 | Шкаф | Массив дерева |
5 | Комод | ЛДСП |
6 | Тумба | Дерево |
Однако по своей сути это один и тот же материал, мы просто решили или подкорректировать его название, или ошиблись при добавлении новой записи. Это и есть аномалия, когда одни данные в одном месте не соответствуют вроде как точно таким же данным в другом месте. Это всего лишь один вид аномалии, однако в процессе добавления, изменения и удаления данных может возникать много других противоречивых ситуаций, т.е. аномалий.
При этом, обязательно стоит отметить, что в нашей таблице всего 5 записей, а теперь представьте, что их миллион!
Именно поэтому мы должны устранять избыточность данных в базе, т.е. проводить так называемую нормализацию базы данных.
В данном конкретном случае мы должны название материала, из которого изготовлены предметы мебели, вынести в отдельную таблицу, а в таблице с предметами сделать всего лишь ссылку на нужный материал, тем самым, соотнеся эту ссылку с исходной записью, мы будем понимать, из какого материала сделан тот или иной предмет.
Идентификатор предмета | Наименование предмета | Идентификатор материала |
1 | Стул | 2 |
2 | Стол | 1 |
3 | Кровать | 3 |
4 | Шкаф | 1 |
5 | Комод | 3 |
Материалы, из которых изготовлены предметы мебели.
Идентификатор материала | Материал |
1 | Массив дерева |
2 | Металл |
3 | ЛДСП |
В этом случае когда нам потребуется изменить название материала, мы будем вносить изменение только в одном месте, т.е. править только одну строку.
Таким образом, представляя материалы в виде отдельной сущности и создавая для нее отдельную таблицу, мы устраняем описанную выше аномалию.
Другими словами, каждая сущность должна храниться отдельно, а в случае необходимости использования этой сущности в другой таблице на нее делается всего лишь ссылка, т.е. выстраивается связь.
Нормальные формы базы данных
В целом процесс нормализации базы данных выглядит следующим образом: мы, следуя определённым правилам и соблюдая определенные требования, проектируем таблицы в базе данных.
При этом все эти правила и требования можно сгруппировать в несколько наборов, и если спроектировать базу данных с соблюдением всех правил и требований, которые включаются в тот или иной набор, то база данных будет находиться в определённом состоянии, т.е. форме, и такая форма называется нормальная форма базы данных.
Иными словами, следуя определённым правилам и соблюдая определенные требования мы приводим базу данных к определенной нормальной форме.
Нормальная форма базы данных – это набор правил и критериев, которым должна отвечать база данных.
Каждая следующая нормальная форма содержит более строгие правила и критерии, тем самым приводя базу данных к определённой нормальной форме мы устраняем определённый набор аномалий.
Отсюда можно сделать вывод, что чем выше нормальная форма, тем меньше аномалий в базе будет.
Процесс нормализации – это последовательный процесс приведения базы данных к эталонному виду, т.е. переход от одной нормальной формы к следующей.
Иными словами, процесс перехода от одной нормальной формы к следующей – это усовершенствование базы данных. Так как если база данных находится в какой-то определённой нормальной форме – это означает, что в базе данных отсутствует определенный вид аномалий.
Существует 5 основных нормальных форм базы данных:
Однако выделяют еще дополнительные нормальные формы:
Если объединить оба этих списка и упорядочить нормальные формы от менее нормализованной до самой нормализованной, т.е. начиная с формы, при которой база данных по своей сути не является нормализованной, и заканчивая самой строгой нормальной формой, то мы получим следующий перечень:
База данных считается нормализованной, если она находится как минимум в третьей нормальной форме (3NF).
В реальном мире нормализация до третьей нормальной формы (3NF) является обычной, стандартной практикой, так как 3NF устраняет достаточное количество аномалий, при этом производительность базы данных, а также удобство ее использования не снижается, что нельзя сказать о всех последующих формах.
Ситуации, при которых требуется нормализовать базу данных до четвертой нормальной формы (4NF), в реальном мире встречаются достаточно редко.
Заметка! Если Вас интересует язык SQL, рекомендую почитать мою книгу «SQL код», которая ориентирована на изучение SQL как стандарта, после прочтения книги Вы сможете писать SQL запросы в любой системе управления базами данных.
Если говорить о всех последующих нормальных формах (5NF, DKNF, 6NF), то в реальной жизни трудно даже представить ситуации, при которых потребуется нормализовать базу данных до этих форм.
Иными словами, 5NF, DKNF, 6NF – это в большей степени теоретические нормальные формы, немного отстраненные от реального мира.
Стоит отметить, что приведение базы данных к какой-то конкретной нормальной форме, обязательно требует, чтобы эта база данных уже находилась в предыдущей нормальной форме. Другими словами, если Вы хотите нормализовать базу данных до третьей нормальной формы, то база уже должна находиться во второй нормальной форме, т.е. нельзя нормализовать базу данных до третьей формы, если она еще не нормализована до второй.
Описание нормальных форм базы данных
В следующих статьях представлено подробное описание каждой нормальной формы и приведены примеры.
На сегодня это все, надеюсь, материал был Вам полезен и интересен, пока!
Физический факультет
Нормальная форма
Нормальная форма — требование, предъявляемое к отношениям в теории реляционных баз данных для устранения из базы избыточности, которая потенциально может привести к логически ошибочным результатам выборки или изменения данных.
Оглавление документа
Нормализация баз данных
Процесс преобразования базы данных к виду, отвечающему нормальным формам, называется нормализацией. Нормализация позволяет обезопасить базу данных от логических и структурных проблем, называемых аномалиями данных. К примеру, когда существует несколько одинаковых записей в таблице, существует риск нарушения целостности данных при обновлении таблицы. Таблица, прошедшая нормализацию, менее подвержена таким проблемам, т.к. ее структура предполагает определение связей между данными, что исключает необходимость в существовании записей с повторяющейся информацией.
Происхождение и назначение нормальных форм
Понятие нормальной формы было введено Эдгаром Коддом при создании реляционной модели БД. Основное назначение нормальных форм — приведение структуры базы данных к виду, обеспечивающему минимальную избыточность. Устранение избыточности производится за счёт декомпозиции отношений (таблиц) таким образом, чтобы в каждом отношении хранились только первичные факты (то есть факты, не выводимые из других хранимых фактов). Таким образом, нормализация не имеет целью уменьшение или увеличение производительности работы или же уменьшение или увеличение объёма БД. Конечной целью нормализации является уменьшение потенциальной противоречивости хранимой в БД информации.
Типы нормальных форм
Нормализация может применяться к таблице, которая представляет собой правильное отношение.
Первая нормальная форма (1NF)
Таблица находится в первой нормальной форме, если каждый её атрибут атомарен. Под выражением «атрибут атомарен» понимается, что атрибут может содержать только одно значение. Таким образом, не существует 1NF таблицы, в полях которых могут храниться списки значений. Для приведения таблицы к 1NF обычно требуется разбить таблицу на несколько отдельных таблиц.
Замечание: в реляционной модели отношение всегда находится в 1 (или более высокой) нормальной форме в том смысле, что иные отношения не рассматриваются в реляционной модели. То есть само определение понятия отношение заведомо подразумевает наличие 1NF.
Пример приведения таблицы к первой нормальной форме
Исходная, ненормализованная, таблица:
Сотрудник | Номер телефона |
Иванов И. И. | 283–56–82 390–57–34 |
Петров П. Ю. | 708–62–34 |
Таблица, приведённая к 1NF:
Сотрудник | Номер телефона |
Иванов И. И. | 283–56–82 |
Иванов И. И. | 390–57–34 |
Петров П. Ю. | 708–62–34 |
Атомарность атрибутов
Вопрос об атомарности атрибутов решается на основе семантики данных, то есть их смыслового значения. Атрибут атомарен, если его значение теряет смысл при любом разбиении на части или переупорядочивании. И наоборот, если какой-либо способ разбиения на части не лишает атрибут смысла, то атрибут неатомарен. Одно и то же значение может быть атомарным или неатомарным в зависимости от смысла этого значения. Например, значение «4286» является
Хорошим способом принятия решения о необходимости разбиения атрибута на части является вопрос: «будут ли части атрибута использоваться по отдельности?». Если да, то атрибут следует разделить (но так, чтобы сохранились осмысленные части атрибута). Далее необходимо снова задаться тем же вопросом для новой структуры и так до тех пор, пока не останется атрибутов, допускающих разбиение.
Примеры неатомарного атрибута, часто встречающиеся на практике: составные поля в виде строки идентификаторов, разделённых, скажем, запятыми: 100,32,168,1045
Вторая нормальная форма (2NF)
Таблица находится во второй нормальной форме, если она находится в первой нормальной форме, и при этом любой её атрибут, не входящий в состав первичного ключа, функционально полно зависит от первичного ключа. Функционально полная зависимость означает, что атрибут функционально зависит от всего первичного составного ключа, но при этом не находится в функциональной зависимости от какой-либо из входящих в него атрибутов(частей). Или другими словами: в 2НФ нет неключевых атрибутов, зависящих от части составного ключа (+ выполняются условия 1НФ).
Пример приведения таблицы ко второй нормальной форме
Пусть Начальник и Должность вместе образуют первичный ключ в такой таблице:
Начальник | Должность | Зарплата | Наличие компьютера |
Гришин | Кладовщик | 20000 | Нет |
Васильев | Программист | 40000 | Есть |
Васильев | Кладовщик | 25000 | Нет |
Зарплату сотруднику каждый начальник устанавливает сам, но её границы зависят от должности. Наличие же компьютера у сотрудника зависит только от должности, то есть зависимость от первичного ключа не полная.
В результате приведения к 2NF получим две таблицы:
Начальник | Должность | Зарплата |
Гришин | Кладовщик | 20000 |
Васильев | Программист | 40000 |
Васильев | Кладовщик | 25000 |
Здесь первичный ключ, как и в исходной таблице, составной, но единственный не входящий в него атрибут Зарплата зависит теперь от всего ключа, то есть полно.
Должность | Наличие компьютера |
Кладовщик | Нет |
Программист | Есть |
Третья нормальная форма (3NF)
Таблица находится в третьей нормальной форме, если она находится во второй нормальной форме, и при этом любой её неключевой атрибут функционально зависит только от первичного ключа. Или что тоже самое – «нет зависимостей неключевых атрибутов от других неключевых атрибутов + 2НФ».
При решении практических задач в большинстве случаев третья нормальная форма является достаточной. Процесс проектирования реляционной базы данных, как правило, заканчивается приведением к 3NF.
Пример приведения таблицы к третьей нормальной форме
Фамилия | Отдел | Телефон |
Гришин | 1 | 11–22–33 |
Васильев | 1 | 11–22–33 |
Петров | 2 | 44–55–66 |
В результате приведения к 3NF получим две таблицы:
Фамилия | Отдел |
Гришин | 1 |
Васильев | 1 |
Петров | 2 |
Отдел | Телефон |
1 | 11–22–33 |
2 | 44–55–66 |
Нормальная форма Бойса—Кодда (NFBC)
Между третьей и четвертой формами существует еще одна разновидность — нормальная форма Бойса—Кодда (НФБК). Все зависимые от первичного ключа атрибуты должны быть потенциальными ключами отношения. Если это условие не выполняется для них создаётся отдельное отношение. Чтобы сущность соответствовала НФБК, она должна находиться в третьей нормальной форме. Любая сущность с единственным возможным ключом, соответствующая требованиям третьей нормальной формы, автоматически находится в НФБК.
Пример приведения таблицы к нормальной форме Бойса—Кодда
Номер клиента | Дата собеседования | Время собеседования | Номер комнаты | Номер сотрудника |
С345 | 13.10.03 | 13.00 | 103 | А138 |
С355 | 13.10.03 | 13.05 | 103 | А136 |
С368 | 13.09.03 | 13.00 | 102 | А154 |
С366 | 13.09.03 | 13.30 | 105 | А207 |
В результате приведения к форме Бойса—Кодда получим две таблицы:
Номер клиента | Дата собеседования | Время собеседования | Номер Сотрудника |
С345 | 13.10.03 | 13.00 | А138 |
С355 | 13.10.03 | 13.05 | А136 |
С368 | 13.09.03 | 13.00 | А154 |
С366 | 13.09.03 | 13.30 | А207 |
Дата собеседования | Номер сотрудника | Номер комнаты |
13.10.03 | А138 | 103 |
13.10.03 | А136 | 103 |
13.09.03 | А154 | 102 |
13.09.03 | А207 | 105 |
Пример ситуации 3NF, но не BCNF: отношение имеет два (или более) возможных ключа, которые являются составными и имеют общий атрибут. Однако на практике как правило 3NF эквивалентна BCNF.
Четвёртая нормальная форма (4NF)
Таблица находится в 4NF, если она находится в BCNF и не содержит нетривиальных многозначных зависимостей. Многозначная зависимость не является функциональной, она существует в том случае, когда из факта, что в таблице содержится некоторая строка X, следует, что в таблице обязательно существует некоторая определённая строка Y.
То есть, таблица находится в 4NF, если все ее многозначные зависимости являются функциональными.
Пятая нормальная форма (5NF)
Таблица находится в 5NF, если она находится в 4NF и любая многозначная зависимость соединения в ней является тривиальной.
Пятая нормальная форма в большей степени является теоретическим исследованием, и практически не применяется при реальном проектировании баз данных. Это связано со сложностью определения самого наличия зависимостей «проекции — соединения», поскольку утверждение о наличии такой зависимости должно быть сделано для всех возможных состояний БД.
Описание основ нормализации базы данных
Office 365 ProPlus переименован в Майкрософт 365 корпоративные приложения. Для получения дополнительной информации об этом изменении прочитайте этот блог.
Исходный номер КБ: 283878
В этой статье объясняется терминология нормализации баз данных для начинающих. Базовое понимание этой терминологии полезно при обсуждении разработки реляционной базы данных.
Описание нормализации
Нормализация — это процесс организации данных в базе данных. Это включает создание таблиц и установление связей между этими таблицами в соответствии с правилами, предназначенными как для защиты данных, так и для того, чтобы сделать базу данных более гибкой за счет устранения избыточности и непоследовательной зависимости.
Избыточные данные пустая трата дискового пространства и создает проблемы с обслуживанием. Если данные, которые существуют в нескольких местах, должны быть изменены, данные должны быть изменены точно так же во всех расположениях. Изменение адреса клиента гораздо проще реализовать, если эти данные хранятся только в таблице Клиентов и нигде в базе данных.
Что такое «непоследовательная зависимость»? Хотя пользователю интуитивно понятно искать в таблице Клиенты адрес конкретного клиента, не имеет смысла искать там зарплату сотрудника, который вызывает этого клиента. Заработная плата сотрудника связана с сотрудником или зависит от него, и поэтому его следует перенаселять в таблицу «Сотрудники». Несовместимые зависимости могут затруднить доступ к данным, так как путь к поиску данных может быть пропущен или нарушен.
Существует несколько правил нормализации базы данных. Каждое правило называется «нормальной формой». Если первое правило соблюдается, база данных, как сообщается, находится в «первой нормальной форме». Если соблюдаются первые три правила, база данных рассматривается как «третья нормальная форма». Хотя возможны другие уровни нормализации, третья нормальная форма считается наивысшим уровнем, необходимым для большинства приложений.
Как и во многих формальных правилах и спецификациях, сценарии реального мира не всегда позволяют обеспечить идеальное соответствие требованиям. Как правило, для нормализации требуются дополнительные таблицы, и некоторые клиенты считают это громоздким. Если вы решите нарушить одно из первых трех правил нормализации, убедитесь, что ваше приложение предвосхищает возможные проблемы, такие как избыточные данные и несовместимые зависимости.
Ниже описаны примеры.
Первая нормальная форма
Не используйте несколько полей в одной таблице для хранения аналогичных данных. Например, для отслеживания элемента инвентаризации, который может приходить из двух возможных источников, запись инвентаризации может содержать поля для кода поставщика 1 и кода поставщика 2.
Что происходит при добавлении третьего поставщика? Добавление поля не является ответом; она требует изменений программы и таблицы и не позволяет плавно разместить динамическое число поставщиков. Вместо этого поместите всю информацию поставщика в отдельную таблицу под названием Поставщики, а затем увязыв инвентаризацию с поставщиками с ключом номера элемента, или поставщики для инвентаризации с ключом кода поставщика.
Вторая нормальная форма
Записи не должны зависеть от чего-либо, кроме основного ключа таблицы (сложный ключ, если это необходимо). Например, рассмотрим адрес клиента в системе учета. Адрес необходим в таблице Клиенты, а также таблицами «Заказы», «Доставка», «Счета-фактуры», «Отчеты о счетах» и «Коллекции». Вместо того, чтобы хранить адрес клиента как отдельную запись в каждой из этих таблиц, храните его в одном месте, в таблице Клиенты или в отдельной таблице Адресов.
Третья нормальная форма
Значения в записи, которая не входит в ключ этой записи, не относятся к таблице. В общем, в любое время содержимое группы полей может применяться к более чем одной записи в таблице, рассмотрите возможность размещения этих полей в отдельной таблице.
Например, в таблице набора сотрудников может быть включено имя и адрес университета кандидата. Но для групповой рассылки необходим полный список университетов. Если сведения о университетах хранятся в таблице Candidates, нет возможности перечислять университеты без текущих кандидатов. Создайте отдельную таблицу университетов и привяжете ее к таблице Кандидаты с ключом кода университета.
ИСКЛЮЧЕНИЕ: применение третьей обычной формы, хотя теоретически желательно, не всегда является практическим. Если у вас есть таблица Клиентов и вы хотите устранить все возможные зависимости между полями, необходимо создать отдельные таблицы для городов, почтовых индексов, представителей продаж, классов клиентов и любого другого фактора, который может быть дублирован в нескольких записях. В теории, нормализация стоит очистки. Однако многие небольшие таблицы могут ухудшать производительность или превышать возможности открытого файла и памяти.
Возможно, более целесообразно применять третью нормальную форму только к данным, которые часто меняются. Если остаются некоторые зависимые поля, спроектировать приложение, чтобы потребовать от пользователя проверить все связанные поля при их смене.
Другие формы нормализации
Четвертая нормальная форма, также называемая «Обычная форма Бойс Кодд» (BCNF), и пятая нормальная форма существуют, но редко рассматриваются в практическом дизайне. Игнорирование этих правил может привести к менее совершенному дизайну базы данных, но не должно влиять на функциональные возможности.
Нормализация таблицы примеров
Эти действия демонстрируют процесс нормализации фиктивной студенческой таблицы.
Student # | Советник | Adv-Room | Класс 1 | Class2 | Class3 |
---|---|---|---|---|---|
1022 | Джонс | 412 | 101-07 | 143-01 | 159-02 |
4123 | Smith | 216 | 101-07 | 143-01 | 179-04 |
Первая нормальная форма: нет повторяюющихся групп
Таблицы должны иметь только два измерения. Так как у одного учащегося несколько классов, эти классы должны быть указаны в отдельной таблице. Поля Class1, Class2 и Class3 в вышеуказанных записях указывают на проблемы с дизайном.
Таблицы часто используют третье измерение, но таблицы не должны. Другой способ взглянуть на эту проблему — это отношение между одним и большим количеством, не помещая одну сторону и множество сторон в одну таблицу. Вместо этого создайте другую таблицу в первой обычной форме, устранив группу повторяющихся (Класс#), как показано ниже:
Student # | Советник | Adv-Room | Класс # |
---|---|---|---|
1022 | Джонс | 412 | 101-07 |
1022 | Джонс | 412 | 143-01 |
1022 | Джонс | 412 | 159-02 |
4123 | Smith | 216 | 101-07 |
4123 | Smith | 216 | 143-01 |
4123 | Smith | 216 | 179-04 |
Вторая нормальная форма: устранение избыточных данных
Обратите внимание на несколько значений Класса#для каждого значения Student# в вышеуказанной таблице. Класс# функционально не зависит от student# (основной ключ), поэтому эта связь не находится во второй нормальной форме.
В следующих таблицах демонстрируется вторая нормальная форма:
Student # | Советник | Adv-Room |
---|---|---|
1022 | Джонс | 412 |
4123 | Smith | 216 |
Student # | Класс # |
---|---|
1022 | 101-07 |
1022 | 143-01 |
1022 | 159-02 |
4123 | 101-07 |
4123 | 143-01 |
4123 | 179-04 |
Третья нормальная форма: устранение данных, не зависящих от ключа
В последнем примере Adv-Room (номер офиса советника) функционально зависит от атрибута Advisor. Решение заключается в том, чтобы переместить этот атрибут из таблицы Студенты в таблицу факультета, как показано ниже: