Могут ли таблицы потерять простые атрибуты во время нормализации 2NF?

Я хочу перенести эту таблицу в дизайн 2NF:

Студенческий билет Учитель-Нет Учитель СтудентНавык С1 1 Отт Питон С1 2 Биглер Питон С1 1 Отт SQL С1 2 Биглер SQL С2 1 Хансен Питон С2 2 Мюллер Питон S3 1 Смит HTML S3 1 Смит Ява

Student-ID однозначно идентифицирует студента.
Учитель — имя преподавателя, зависящее от комбинации Student-ID и Teacher-No.
StudentSkill — это навык, которым обладает ученик, совершенно не связанный с учителем.

В таблице написано:

У студента S1 есть два учителя (Отт, Биглер) и два несвязанных навыка (Python, SQL).
У ученика S2 есть два учителя (Хансен, Мюллер) и один несвязанный навык (Python).
У ученика S3 есть один учитель (Смит) и два несвязанных навыка (HTML, Java).

Первичный ключ представляет собой комбинацию (ID студента, № учителя, StudentSkill).

Есть частичная зависимость. Учитель зависит только от идентификатора ученика и номера учителя. Поэтому я создаю новую таблицу для имен учителей:

Студенческий билет Учитель-Нет Учитель С1 1 Отт С1 2 Биглер С2 1 Хансен С2 2 Мюллер S3 1 Смит

и исходная таблица теряет столбец «Учитель»:

Студенческий билет Учитель-Нет СтудентНавык С1 1 Питон С1 2 Питон С1 1 SQL С1 2 SQL С2 1 Питон С2 2 Питон S3 1 HTML S3 1 Ява

А как насчет столбца «Номер учителя» в таблице (ID студента, Номер учителя, StudentSkill)?

Ничего полезного он не делает (поскольку навыки не связаны с преподавателями), но является частью первичного ключа, поэтому я не могу его трогать при создании 2НФ.

Могут ли таблицы потерять простые атрибуты во время нормализации 2NF?

@Priyank, если бы я столкнулся с этой проблемой во время разработки, я бы просто удалил столбец «Нет учителя» из таблицы (Student-ID, Teacher-No, StudentSkill), а затем все повторяющиеся строки.

actual_panda 19.08.2024 17:05

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

Priyank 19.08.2024 17:43

Какой у вас 1 конкретный исследовательский вопрос, не повторяющийся? Как задать вопрос Справочный центр PS Что значит «а что насчет»? Если у вас есть конкретный вопрос относительно каких-то ожиданий, дайте полное и четкое обоснование в виде небольших, очевидно правильных шагов, а также то, чего вы ожидаете и почему вы этого ожидаете. PS Не беда, если вы что-то заметите, следуя алгоритму. Просто следуйте этому. PS 2NF бесполезен. 3НФ всегда возможен с сохранением ФД. Мы не идем к более высоким НФ, проходя через более низкие НФ. Более того, это может помешать возникновению лучших высших НФ. PS Только некоторые частичные ФД являются проблематичными для 2НФ.

philipxy 20.08.2024 02:05

Где вы в первую очередь застряли, следуя опубликованному или обоснованному соответствующему процессу, и что сделали?

philipxy 20.08.2024 02:13

«Учитель — это имя учителя, зависящее от комбинации идентификатора ученика и номера учителя». Да, но от таблицы это тоже не зависит только от одного из них, но вы этого не сказали, и вы можете думать, а можете и не думать, что в цитате это есть, но естественный язык неоднозначен. Ваше использование естественного языка неясно. Используйте технические термины и обозначения, используйте их правильно и дайте заключение или покрытие всех соответствующих ограничений. Кроме того, в реальной жизни мы ожидаем, что у каждого ученика будет одно и то же имя, поэтому это плохой пример из реальной жизни для данных ограничений.

philipxy 20.08.2024 02:20

Определения НФ приведены в часто задаваемых вопросах. Нормализация до 3NF и, следовательно, 2NF — это часто задаваемые вопросы. «Мой вопрос в том, удовлетворяет ли он 2NF». Не согласно вашему сообщению. «Какой у вас 1 конкретный исследованный неповторяющийся вопрос?» PS Пожалуйста, вносите ясность с помощью правок, а не комментариев, удаляйте и отмечайте устаревшие комментарии.

philipxy 20.08.2024 02:41

@philipxy Задача — привести исходную таблицу в 2НФ, а не в 3НФ. Исходная таблица имеет 3 основных атрибута (Student-ID, Teacher-No, StudentSkill). Teacher-No перечисляет учителей для каждого ученика. Другими словами, у каждого ученика может быть от 1 до n учителей. После разделения таблицы, как показано, в последней таблице я получаю бесполезный столбец «Учитель-Нет», который технически все еще является основным атрибутом. Мой вопрос заключается в том, удовлетворяет ли мое решение 2NF независимо от того, или я ДОЛЖЕН удалить основной атрибут «Учитель-Нет» из последней таблицы.

actual_panda 20.08.2024 10:29

Еще раз: «Пожалуйста, внесите пояснения с помощью правок, а не комментариев, удаляйте и отмечайте устаревшие комментарии». «Мой вопрос [...]» — Опять: «Не согласно вашему посту». «Какой у вас 1 конкретный исследованный неповторяющийся вопрос?» «2НФ, а не 3НФ». Еще раз: вводя в 3НФ, мы получаем 2НФ. PS "ничего полезного не делает"-непонятно и какое отношение это имеет к нормализации к 2NF?? «таблицы теряют основные атрибуты». Что означает «терять»? 1 таблица нормирована на другие. "поэтому я не могу прикоснуться к нему" Почему?? Какое отношение эти смутные опасения имеют к 2NF? Пожалуйста, отредактируйте свое сообщение, чтобы задать 1 вопрос и ответить на все мои комментарии.

philipxy 20.08.2024 20:46
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
0
8
51
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Для 2НФ

  1. Таблица должна быть в формате 1NF.
  2. Не должно быть частичной зависимости неключевого столбца от составного первичного ключа.

Поэтому в этом случае правильно удалить столбец «Номер учителя» во второй таблице, поскольку навык зависит только от идентификатора ученика.

Навык — ключевой столбец, так почему же так важно, от чего он зависит?

actual_panda 20.08.2024 10:25
Ответ принят как подходящий

Предложенное вами разложение удовлетворяет 2НФ.

Таблица (Идентификатор ученика, № учителя, Учитель) (ключевые атрибуты выделены жирным шрифтом) находится в 2NF, поскольку учитель зависит как от идентификатора ученика, так и от номера учителя.

Таблица (Student-ID, Teacher-No, StudentSkill) находится во 2NF, поскольку у нее нет неключевых атрибутов.

Однако это не единственный способ достичь 2NF в этом сценарии, и лучшим решением было бы разложить исходную таблицу на следующие таблицы.

Студенческий билет Учитель-Нет Учитель С1 1 Отт С1 2 Биглер С2 1 Хансен С2 2 Мюллер S3 1 Смит
Студенческий билет СтудентНавык С1 Питон С1 SQL С2 Питон S3 HTML S3 Ява

Эта конструкция удаляет лишний столбец «Учитель-Нет» из таблицы с навыками и также удовлетворяет требованиям 2NF.

Итак, чтобы ответить на ваш первоначальный вопрос, могут ли таблицы нормализации 2NF терять простые атрибуты: да, но это не обязательно. В этом конкретном сценарии лучше использовать схему, которая удаляет главный атрибут «Учитель-Нет» из таблицы навыков.

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

«Однако BCNF поймает это». Нет. Этот «плохой» дизайн уже есть в BCNF. «Плохая» таблица не удовлетворяет никаким нетривиальным ФД. Дальнейшие его аномалии — от МВД. Его нет в 4NF, который является «хорошим» дизайном.

philipxy 20.08.2024 20:50

«находится во 2NF, потому что Учитель зависит как от идентификатора ученика, так и от номера учителя». Это типичный нечеткий двусмысленный язык. Это потому, что он не зависит от набора меньших, чем оба, но при этом зависит от набора обоих.

philipxy 20.08.2024 22:55

Другие вопросы по теме