powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Теоретический вопрос по нормализации
25 сообщений из 39, страница 1 из 2
Теоретический вопрос по нормализации
    #39925400
Pavel_from_Nsk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Уважаемые форумчане,

Изучаю теорию, помогите, пожалуйста, выйти из логического тупика.

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

Teacher Subject
---------------------
Иванов Англ. яз
Петров Англ. яз.
Сидоров Информатика

Между полями есть ФЗ: Teacher -> Subject.
Судя по определению, таблица находится в 3 НФ.

Если же я добавляю еще одно поле с идентификатором записи (id) и делаю его первичным ключом:

Id Teacher Subject
---------------------
1. Иванов Англ. яз
2. Петров Англ. яз.
3. Сидоров Информатика ,

То получается, что у меня появляется ФЗ Id->Teacher ( по Id можно однозначно установить Teacher) и прежняя, между теперь неключевыми атрибутами Teacher -> Subject.
Следовательно, есть транзитивная зависимость Id->Subject и таблица перестает удовлетворять даже требованию к 3 НФ.
Хотя интуитивно понятно, что таблица находится и в 3 НФ и в НФБК.

Подскажите, пожалуйста, где ошибка в логике.

Спасибо.
...
Рейтинг: 0 / 0
Теоретический вопрос по нормализации
    #39925411
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pavel_from_Nskгде ошибка в логике.

Везде. Первая таблица не находится в третьей НФ, поскольку значения атрибута дублируются
между записями. Во второй таблице нет ФЗ зависимости Id->Teacher поскольку стёртое
значение Teacher невозможно восстановить из Id.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Теоретический вопрос по нормализации
    #39925413
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pavel_from_Nsk,

Слишком много громких фраз... вы рисуйте, рисуйте, тогда можно будет что-то обсуждать...
В этом и есть весь смысл, чтобы то что в одной строке, распределить по таблицам БД...
А если на мусорное ведро повесить инвентарный номер, то оно все равно останется мусорным ведром...

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


То что вы хотите выше будет выглядеть в БД примерно как на картинке, но я лично сомневаюсь, что преподаватель всегда преподает только одну дисциплину, обычно математика и геометрия идут рядом и не только они, попробуйте допилить чтобы преподаватель мог вести несколько дисциплин
...
Рейтинг: 0 / 0
Теоретический вопрос по нормализации
    #39925418
Фотография Relic Hunter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vmag,

OH, well :(
...
Рейтинг: 0 / 0
Теоретический вопрос по нормализации
    #39925457
Pavel_from_Nsk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vmag,

Спасибо за ответ.
Мой вопрос как раз чисто теоретический, так я и назвал тему. Вопрос возник при чтении туторилов и прочих ресурсов по нормализации. Конкертно этот пример, взяти из https://www.studytonight.com/dbms/boyce-codd-normal-form.php , где описывается НФБК.
Авторы в итоге показывают таблицу, как приведена мной и пишут, что теперь она в НФБК.
А я не могу понять откуда там НФБК, если там есть очевидные транзитивные зависимости.

Если сможете посмотреть пример, и прокомментировать, буду оч. благодарен.
...
Рейтинг: 0 / 0
Теоретический вопрос по нормализации
    #39925495
ИВП
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
Первая таблица не находится в третьей НФ, поскольку значения атрибута дублируются
между записями. Во второй таблице нет ФЗ зависимости Id->Teacher поскольку стёртое
значение Teacher невозможно восстановить из Id.

1) Что значит «дублируется»?
3НФ - отсутствие транзитивных зависимостей. Их тут нет и не может быть, т.к. атрибутов всего ДВА, для транзитивной зависимости должно быть хотя бы ТРИ.
2) Что за новый термин «стертое значение»?
«Невозможно восстановить» - а где и что возможно восстановить?
ФЗ - каждому значению первого атрибута (Id) соответствует ровно одно значение второго (Teacher). Здесь именно так.
...
Рейтинг: 0 / 0
Теоретический вопрос по нормализации
    #39925518
Фотография полудух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Теоретический вопрос по нормализации
    #39925531
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pavel_from_Nsk
vmag,

Спасибо за ответ.
Мой вопрос как раз чисто теоретический, так я и назвал тему. Вопрос возник при чтении туторилов и прочих ресурсов по нормализации. Конкертно этот пример, взяти из https://www.studytonight.com/dbms/boyce-codd-normal-form.php , где описывается НФБК.
Авторы в итоге показывают таблицу, как приведена мной и пишут, что теперь она в НФБК.
А я не могу понять откуда там НФБК, если там есть очевидные транзитивные зависимости.

Если сможете посмотреть пример, и прокомментировать, буду оч. благодарен.

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

Твой пример другой.
Ты просто заменяешь естественный ключ суррогатным и справедливо замечаешь, что твоя нормальность разрушилась и исчезла как улыбка Чеширского кота.
Там где работают с суррогатный ключами, оставляют естественный в качестве альтернативного.
Нормальность сохраняются с точностью до использования неестественного первичного ключа.
...
Рейтинг: 0 / 0
Теоретический вопрос по нормализации
    #39925540
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pavel_from_Nsk
Между полями есть ФЗ: Teacher -> Subject.
Судя по определению, таблица находится в 3 НФ.


Нет. Это не 3НФ, а какая-то профанация.
...
Рейтинг: 0 / 0
Теоретический вопрос по нормализации
    #39925628
Pavel_from_Nsk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
booby,

Благодарю за ответ.

После еще одного анализа определения транзитивной зависимости и 3 НФ я пришел к выводу, что в таблице


Id Teacher Subject
---------------------
1. Иванов Англ. яз
2. Петров Англ. яз.
3. Сидоров Информатика ,

нет транзитивной зависимости.
Вот определение, которое я использовал:
авторФункциональная зависимость R.X -> R.Y называется транзитивной, если существует такой атрибут Z, что имеются функциональные зависимости R.X -> R.Z и R.Z -> R.Y и отсутствует функциональная зависимость R.Z --> R.X.

Таким образом существуют ФЗ id-> teacher и teacher->subject, но есть и ФЗ teacher->id, что не позволяет считать зависимость неключевого атрибута транзитивной. Эти размышления согласуются с пояснениями в англоязычной вики автор https://en.wikipedia.org/wiki/Third_normal_form , в которых говорится, что для того чтобы таблица была в 3 НФ в ней не должно быть зависимости неключевых атрибутов от неключевых, т.е. все неключевые должны зависеть от потенциальных. В моем примере неключевой subject зависит от кандидата teacher, что не противоречит 3 НФ.

Что касатеся
автор в том примере и Петров и Сидоров входят в составной ключ отношения.,

то я не смог понять, что имелось в виду. Если связка таблиц Student Table(student_id, p_id) и ProfessorTable(p_id, professor, subject), то мне кажется очевидным, что первичный ключ тут p_id и professor в него не входит.

Оффтоп вопрос - как на форуме говорить "Спасибо", не вижу специальной кнопочки.
...
Рейтинг: 0 / 0
Теоретический вопрос по нормализации
    #39925687
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИВПФЗ - каждому значению первого атрибута (Id) соответствует ровно одно значение второго
(Teacher).

Нет. ФЗ это "один атрибут является функцией другого". То есть существует некоторая функция
y=f(x) по которой его можно вычислить. Ты знаешь как вычислить Teacher по Id?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Теоретический вопрос по нормализации
    #39925707
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pavel_from_NskВот определение, которое я использовал:

Зазубривать хитроподвыподвертнутые определения это хорошо для сдачи зачёта, но для
практического применения всё же лучше использовать определения попроще и конкретнее:

Первая НФ запрещает обращаться к части поля (класть в одно поле два значения).
Вторая НФ запрещает иметь поле, значение которого дублирует (может быть выведено из)
значение другого поля этой же записи.
Третья НФ запрещает повторять значение неключевого (в данном случае имеется в виду внешний
ключ, а не первичный) поля в разных записях. В твоём случае она требует вынести из данной
таблицы предмет в справочник предметов и фамилию в справочник фамилий.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Теоретический вопрос по нормализации
    #39925718
ИВП
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
Нет. ФЗ это "один атрибут является функцией другого". То есть существует некоторая функция y=f(x) по которой его можно вычислить. Ты знаешь как вычислить Teacher по Id?

Что такое "функция"? Зависимость одного параметра от другого. Термин "вычислить" здесь не подходит, т.к. никаких вычислений, здесь нужен термин "определить".
Здесь каждому значению Id соответствует своё, ровно одно значение Teacher.

Пример. У каждого ФИО есть ровно одно значение его ГодаРождения.
Как ВЫЧИСЛИТЬ год рождения по ФИО? Да никак. Но функция ГодРождения=f(ФИО) есть.
По любому значению ФИО всегда можно узнать для него ГодРождения, т.к. он всегда один.

PS Пожалуйста, не надо тыкать всем подряд.
...
Рейтинг: 0 / 0
Теоретический вопрос по нормализации
    #39925740
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИВПЧто такое "функция"?

https://ru.wikipedia.org/wiki/Функция_(математика)

ИВПфункция ГодРождения=f(ФИО) есть.

Тогда потрудитесь привести "алгоритм, который по значению входного данного выдаёт значение
выходного данного" данной функции.
...
Рейтинг: 0 / 0
Теоретический вопрос по нормализации
    #39925793
ИВП
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,
Надо смотреть не на
https://ru.wikipedia.org/wiki/Функция_(математика)
а смотреть надо на
https://ru.wikipedia.org/wiki/Функциональная_зависимость_(программирование)
Не надо путать понятия "Функция" из математики и "Функциональная зависимость" из теории БД.
"Алгоритм, который по значению входного данного выдаёт значение выходного данного" заложен в семантических правилах из предметной области.
В примере с ФИО: "Каждый ФИО имеет определенный год рождения". Где взять ГодРождения для разработчика БД - это дело десятое.
В примере ТСа: "У каждого Id есть определенный Teaher" (хотя здесь есть и обратная зависимость).
...
Рейтинг: 0 / 0
Теоретический вопрос по нормализации
    #39925817
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИВПГде взять ГодРождения для разработчика БД - это дело десятое.

Да нет, это как раз принципиально. Если данная таблица - единственный источник такой
связи, то всё в порядке. Если в БД существует другая таблица, связывающая Id и Teacher -
это уже нехорошо.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Теоретический вопрос по нормализации
    #39925825
ИВП
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
Если в БД существует другая таблица, связывающая Id и Teacher - это уже нехорошо.

Речь шла не об этом. Речь шла о том, есть ли здесь функциональная зависимость одного атрибута от другого.
Вы говорите про неведомое стертое значение
...
Рейтинг: 0 / 0
Теоретический вопрос по нормализации
    #39925836
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pavel_from_Nsk
... Если связка таблиц Student Table(student_id, p_id) и ProfessorTable(p_id, professor, subject), то мне кажется очевидным, что первичный ключ тут p_id и professor в него не входит.


по вашей ссылке речь идёт не об отношении ProfessorTable,
а об отношении Enrollment
И профессор в нём не может не быть частью первичного ключа, при условии, что профессор ведет единственный предмет.
p_id там - идентификатор студента, записавшегося на курс к профессору, а не идентификатор самого профессора, или курса, который он ведет.
...
Рейтинг: 0 / 0
Теоретический вопрос по нормализации
    #39925843
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИВПРечь шла о том, есть ли здесь функциональная зависимость одного атрибута от другого.

И ответ - нет. Поскольку во-первых, Id не является атрибутом, во-вторых, способны
существовать два кортежа, у которых совпадают Teacher, но разные Id.

wikiВторая нормальная форма (2NF)

Переменная отношения находится во второй нормальной форме тогда и только тогда, когда она находится в первой нормальной форме и каждый неключевой атрибут неприводимо (функционально полно) зависит от её потенциального ключа.
...
Рейтинг: 0 / 0
Теоретический вопрос по нормализации
    #39925934
ИВП
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
во-первых, Id не является атрибутом, во-вторых, способны существовать два кортежа, у которых совпадают Teacher, но разные Id.

1) Если Вы так считаете, то пусть в таблице один из столбцов не будет атрибутом (правда непонятно, кто же он тогда?)
2) Мы так не договаривались))).
Здесь уже писАли, что Id - искусственный (суррогатный) ключ, введен в добавление к полю Teacher - естественному ключу . Поэтому повторений в поле Teacher быть не может.
А если предположить, что у разных Id есть одинаковые Teacher, то тогда, конечно, ФЗ отсутствует.
...
Рейтинг: 0 / 0
Теоретический вопрос по нормализации
    #39925936
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИВПкто же он тогда?

Ключ. О котором и говорится в приведённой цитате с википузии.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Теоретический вопрос по нормализации
    #39925988
ИВП
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
Ключ. О котором и говорится в приведённой цитате с википузии.

Ключ - атрибут или набор атрибутов, который однозначно определяет кортеж.
Хотя если ключ - суррогатный, т.е. не существующий в предметной области, то может быть его и не надо считать атрибутом. Правда, для меня это новое слово в теории БД ))))
С другой стороны, атрибут - вхождение домена в отношение.
...
Рейтинг: 0 / 0
Теоретический вопрос по нормализации
    #39926041
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну ок, ок, пусть между Id и Teacher есть функциональная зависимость и таким образом
таблица нарушает вторую НФ. Как ты её нормализовывать теперь будешь?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Теоретический вопрос по нормализации
    #39926048
ИВП
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
...таблица нарушает вторую НФ. Как тВы её нормализовывать теперь будешьте?
ПоправЕл, не благодариТЕ

Докладываю.
2НФ - отсутствие частичных зависимостей от составного ключа.
Если ключ не составной (как здесь), то отношение уже находится в 2НФ.
В 3НФ оно находится потому, что отсутствуют транзитивные зависимости (ФЗ неключевых атрибутов от неключевых).

А вот наличие двух возможных ключей ...
...
Рейтинг: 0 / 0
Теоретический вопрос по нормализации
    #39926055
Фотография ChA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
пусть между Id и Teacher есть функциональная зависимость
Но её нет, оба атрибута абсолютно независимы, любому ID можно сопоставить любого Teacher и наоборот, а учитывая, что по условию Teacher тоже уникален, то это просто альтернативный ключ, не более того. ФЗ существовала бы, если бы по ID мы могли точно утверждать, что при его значении равному 1 фамилия Teacher однозначно бы соответствовала Иванову, но ведь это не факт, мы могли сначала занести Петрова и тогда его ID равнялся бы 1. Суррогатный ключ вводится только для гарантии уникальности записи, не считая иных утилитарных целей, никакого предметного смысла он не несёт. Разве что его значение не отобразят обратно в реальный мир, например, в качестве инвентарного номера.
Главная проблема заключается в том, что наличие или отсутствие ФЗ формально не выводимо из данных, указанных в таблице, и доказать её можно только наличием примеров, что требует понимания модели данных предметной области.
...
Рейтинг: 0 / 0
25 сообщений из 39, страница 1 из 2
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Теоретический вопрос по нормализации
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]