|  | 
| 
Теоретический вопрос по нормализации | |||
|---|---|---|---|
| #18+ Уважаемые форумчане,  Изучаю теорию, помогите, пожалуйста, выйти из логического тупика. Ниже пример, в котором я не могу разобраться самостоятельно. Пусть есть таблица с данными о преподавателях и дисциплинах, которые они ведут. Преподаватель может вести одну дисциплину, но одну дисциплину могут вести разные преподаватели. Таблица имеет структуру: Teacher Subject --------------------- Иванов Англ. яз Петров Англ. яз. Сидоров Информатика Между полями есть ФЗ: Teacher -> Subject. Судя по определению, таблица находится в 3 НФ. Если же я добавляю еще одно поле с идентификатором записи (id) и делаю его первичным ключом: Id Teacher Subject --------------------- 1. Иванов Англ. яз 2. Петров Англ. яз. 3. Сидоров Информатика , То получается, что у меня появляется ФЗ Id->Teacher ( по Id можно однозначно установить Teacher) и прежняя, между теперь неключевыми атрибутами Teacher -> Subject. Следовательно, есть транзитивная зависимость Id->Subject и таблица перестает удовлетворять даже требованию к 3 НФ. Хотя интуитивно понятно, что таблица находится и в 3 НФ и в НФБК. Подскажите, пожалуйста, где ошибка в логике. Спасибо. ... | |||
| : 
 Нравится:
     Не нравится:
     | |||
| 11.02.2020, 20:43 |  | ||
| 
Теоретический вопрос по нормализации | |||
|---|---|---|---|
| #18+ Pavel_from_Nskгде ошибка в логике. Везде. Первая таблица не находится в третьей НФ, поскольку значения атрибута дублируются между записями. Во второй таблице нет ФЗ зависимости Id->Teacher поскольку стёртое значение Teacher невозможно восстановить из Id. Posted via ActualForum NNTP Server 1.5 ... | |||
| : 
 Нравится:
     Не нравится:
     | |||
| 11.02.2020, 21:20 |  | ||
| 
Теоретический вопрос по нормализации | |||
|---|---|---|---|
| #18+ Pavel_from_Nsk, Слишком много громких фраз... вы рисуйте, рисуйте, тогда можно будет что-то обсуждать... В этом и есть весь смысл, чтобы то что в одной строке, распределить по таблицам БД... А если на мусорное ведро повесить инвентарный номер, то оно все равно останется мусорным ведром... Pavel_from_Nsk Пусть есть таблица с данными о преподавателях и дисциплинах, которые они ведут. Преподаватель может вести одну дисциплину, но одну дисциплину могут вести разные преподаватели. То что вы хотите выше будет выглядеть в БД примерно как на картинке, но я лично сомневаюсь, что преподаватель всегда преподает только одну дисциплину, обычно математика и геометрия идут рядом и не только они, попробуйте допилить чтобы преподаватель мог вести несколько дисциплин ... | |||
| : 
 Нравится:
     Не нравится:
     | |||
| 11.02.2020, 21:37 |  | ||
| 
Теоретический вопрос по нормализации | |||
|---|---|---|---|
| #18+ vmag, OH, well :( ... | |||
| : 
 Нравится:
     Не нравится:
     | |||
| 11.02.2020, 22:04 |  | ||
| 
Теоретический вопрос по нормализации | |||
|---|---|---|---|
| #18+ vmag, Спасибо за ответ. Мой вопрос как раз чисто теоретический, так я и назвал тему. Вопрос возник при чтении туторилов и прочих ресурсов по нормализации. Конкертно этот пример, взяти из https://www.studytonight.com/dbms/boyce-codd-normal-form.php , где описывается НФБК. Авторы в итоге показывают таблицу, как приведена мной и пишут, что теперь она в НФБК. А я не могу понять откуда там НФБК, если там есть очевидные транзитивные зависимости. Если сможете посмотреть пример, и прокомментировать, буду оч. благодарен. ... | |||
| : 
 Нравится:
     Не нравится:
     | |||
| 12.02.2020, 05:00 |  | ||
| 
Теоретический вопрос по нормализации | |||
|---|---|---|---|
| #18+ Dimitry Sibiryakov Первая таблица не находится в третьей НФ, поскольку значения атрибута дублируются  между записями. Во второй таблице нет ФЗ зависимости Id->Teacher поскольку стёртое значение Teacher невозможно восстановить из Id. 1) Что значит «дублируется»? 3НФ - отсутствие транзитивных зависимостей. Их тут нет и не может быть, т.к. атрибутов всего ДВА, для транзитивной зависимости должно быть хотя бы ТРИ. 2) Что за новый термин «стертое значение»? «Невозможно восстановить» - а где и что возможно восстановить? ФЗ - каждому значению первого атрибута (Id) соответствует ровно одно значение второго (Teacher). Здесь именно так. ... | |||
| : 
 Нравится:
     Не нравится:
     | |||
| 12.02.2020, 10:20 |  | ||
| 
Теоретический вопрос по нормализации | |||
|---|---|---|---|
| #18+ ... | |||
| : 
 Нравится:
     Не нравится:
     | |||
| 12.02.2020, 11:10 |  | ||
| 
Теоретический вопрос по нормализации | |||
|---|---|---|---|
| #18+ Pavel_from_Nsk vmag, Спасибо за ответ. Мой вопрос как раз чисто теоретический, так я и назвал тему. Вопрос возник при чтении туторилов и прочих ресурсов по нормализации. Конкертно этот пример, взяти из https://www.studytonight.com/dbms/boyce-codd-normal-form.php , где описывается НФБК. Авторы в итоге показывают таблицу, как приведена мной и пишут, что теперь она в НФБК. А я не могу понять откуда там НФБК, если там есть очевидные транзитивные зависимости. Если сможете посмотреть пример, и прокомментировать, буду оч. благодарен. в логике ошибки нет. а в книге ты видишь фигу. в том примере и Петров и Сидоров входят в составной ключ отношения. Твой пример другой. Ты просто заменяешь естественный ключ суррогатным и справедливо замечаешь, что твоя нормальность разрушилась и исчезла как улыбка Чеширского кота. Там где работают с суррогатный ключами, оставляют естественный в качестве альтернативного. Нормальность сохраняются с точностью до использования неестественного первичного ключа. ... | |||
| : 
 Нравится:
     Не нравится:
     | |||
| 12.02.2020, 11:25 |  | ||
| 
Теоретический вопрос по нормализации | |||
|---|---|---|---|
| #18+ Pavel_from_Nsk Между полями есть ФЗ: Teacher -> Subject. Судя по определению, таблица находится в 3 НФ. Нет. Это не 3НФ, а какая-то профанация. ... | |||
| : 
 Нравится:
     Не нравится:
     | |||
| 12.02.2020, 11:40 |  | ||
| 
Теоретический вопрос по нормализации | |||
|---|---|---|---|
| #18+ 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 в него не входит. Оффтоп вопрос - как на форуме говорить "Спасибо", не вижу специальной кнопочки. ... | |||
| : 
 Нравится:
     Не нравится:
     | |||
| 12.02.2020, 13:14 |  | ||
| 
Теоретический вопрос по нормализации | |||
|---|---|---|---|
| #18+ ИВПФЗ - каждому значению первого атрибута (Id) соответствует ровно одно значение второго (Teacher). Нет. ФЗ это "один атрибут является функцией другого". То есть существует некоторая функция y=f(x) по которой его можно вычислить. Ты знаешь как вычислить Teacher по Id? Posted via ActualForum NNTP Server 1.5 ... | |||
| : 
 Нравится:
     Не нравится:
     | |||
| 12.02.2020, 13:53 |  | ||
| 
Теоретический вопрос по нормализации | |||
|---|---|---|---|
| #18+ Pavel_from_NskВот определение, которое я использовал: Зазубривать хитроподвыподвертнутые определения это хорошо для сдачи зачёта, но для практического применения всё же лучше использовать определения попроще и конкретнее: Первая НФ запрещает обращаться к части поля (класть в одно поле два значения). Вторая НФ запрещает иметь поле, значение которого дублирует (может быть выведено из) значение другого поля этой же записи. Третья НФ запрещает повторять значение неключевого (в данном случае имеется в виду внешний ключ, а не первичный) поля в разных записях. В твоём случае она требует вынести из данной таблицы предмет в справочник предметов и фамилию в справочник фамилий. Posted via ActualForum NNTP Server 1.5 ... | |||
| : 
 Нравится:
     Не нравится:
     | |||
| 12.02.2020, 14:05 |  | ||
| 
Теоретический вопрос по нормализации | |||
|---|---|---|---|
| #18+ Dimitry Sibiryakov  Нет. ФЗ это "один атрибут является функцией другого". То есть существует некоторая функция y=f(x) по которой его можно вычислить. Ты знаешь как вычислить Teacher по Id? Что такое "функция"? Зависимость одного параметра от другого. Термин "вычислить" здесь не подходит, т.к. никаких вычислений, здесь нужен термин "определить". Здесь каждому значению Id соответствует своё, ровно одно значение Teacher. Пример. У каждого ФИО есть ровно одно значение его ГодаРождения. Как ВЫЧИСЛИТЬ год рождения по ФИО? Да никак. Но функция ГодРождения=f(ФИО) есть. По любому значению ФИО всегда можно узнать для него ГодРождения, т.к. он всегда один. PS Пожалуйста, не надо тыкать всем подряд. ... | |||
| : 
 Нравится:
     Не нравится:
     | |||
| 12.02.2020, 14:22 |  | ||
| 
Теоретический вопрос по нормализации | |||
|---|---|---|---|
| #18+ ИВПЧто такое "функция"? https://ru.wikipedia.org/wiki/Функция_(математика) ИВПфункция ГодРождения=f(ФИО) есть. Тогда потрудитесь привести "алгоритм, который по значению входного данного выдаёт значение выходного данного" данной функции. ... | |||
| : 
 Нравится:
     Не нравится:
     | |||
| 12.02.2020, 14:43 |  | ||
| 
Теоретический вопрос по нормализации | |||
|---|---|---|---|
| #18+ Dimitry Sibiryakov, Надо смотреть не на https://ru.wikipedia.org/wiki/Функция_(математика) а смотреть надо на https://ru.wikipedia.org/wiki/Функциональная_зависимость_(программирование) Не надо путать понятия "Функция" из математики и "Функциональная зависимость" из теории БД. "Алгоритм, который по значению входного данного выдаёт значение выходного данного" заложен в семантических правилах из предметной области. В примере с ФИО: "Каждый ФИО имеет определенный год рождения". Где взять ГодРождения для разработчика БД - это дело десятое. В примере ТСа: "У каждого Id есть определенный Teaher" (хотя здесь есть и обратная зависимость). ... | |||
| : 
 Нравится:
     Не нравится:
     | |||
| 12.02.2020, 15:58 |  | ||
| 
Теоретический вопрос по нормализации | |||
|---|---|---|---|
| #18+ ИВПГде взять ГодРождения для разработчика БД - это дело десятое. Да нет, это как раз принципиально. Если данная таблица - единственный источник такой связи, то всё в порядке. Если в БД существует другая таблица, связывающая Id и Teacher - это уже нехорошо. Posted via ActualForum NNTP Server 1.5 ... | |||
| : 
 Нравится:
     Не нравится:
     | |||
| 12.02.2020, 16:13 |  | ||
| 
Теоретический вопрос по нормализации | |||
|---|---|---|---|
| #18+ Dimitry Sibiryakov Если в БД существует другая таблица, связывающая Id и Teacher - это уже нехорошо. Речь шла не об этом. Речь шла о том, есть ли здесь функциональная зависимость одного атрибута от другого. Вы говорите про неведомое стертое значение ... | |||
| : 
 Нравится:
     Не нравится:
     | |||
| 12.02.2020, 16:22 |  | ||
| 
Теоретический вопрос по нормализации | |||
|---|---|---|---|
| #18+ Pavel_from_Nsk ... Если связка таблиц Student Table(student_id, p_id) и ProfessorTable(p_id, professor, subject), то мне кажется очевидным, что первичный ключ тут p_id и professor в него не входит. по вашей ссылке речь идёт не об отношении ProfessorTable, а об отношении Enrollment И профессор в нём не может не быть частью первичного ключа, при условии, что профессор ведет единственный предмет. p_id там - идентификатор студента, записавшегося на курс к профессору, а не идентификатор самого профессора, или курса, который он ведет. ... | |||
| : 
 Нравится:
     Не нравится:
     | |||
| 12.02.2020, 16:30 |  | ||
| 
Теоретический вопрос по нормализации | |||
|---|---|---|---|
| #18+ ИВПРечь шла о том, есть ли здесь функциональная зависимость одного атрибута от другого. И ответ - нет. Поскольку во-первых, Id не является атрибутом, во-вторых, способны существовать два кортежа, у которых совпадают Teacher, но разные Id. wikiВторая нормальная форма (2NF) Переменная отношения находится во второй нормальной форме тогда и только тогда, когда она находится в первой нормальной форме и каждый неключевой атрибут неприводимо (функционально полно) зависит от её потенциального ключа. ... | |||
| : 
 Нравится:
     Не нравится:
     | |||
| 12.02.2020, 16:40 |  | ||
| 
Теоретический вопрос по нормализации | |||
|---|---|---|---|
| #18+ Dimitry Sibiryakov во-первых, Id не является атрибутом, во-вторых, способны существовать два кортежа, у которых совпадают Teacher, но разные Id. 1) Если Вы так считаете, то пусть в таблице один из столбцов не будет атрибутом (правда непонятно, кто же он тогда?) 2) Мы так не договаривались))). Здесь уже писАли, что Id - искусственный (суррогатный) ключ, введен в добавление к полю Teacher - естественному ключу . Поэтому повторений в поле Teacher быть не может. А если предположить, что у разных Id есть одинаковые Teacher, то тогда, конечно, ФЗ отсутствует. ... | |||
| : 
 Нравится:
     Не нравится:
     | |||
| 12.02.2020, 18:21 |  | ||
| 
Теоретический вопрос по нормализации | |||
|---|---|---|---|
| #18+ ИВПкто же он тогда? Ключ. О котором и говорится в приведённой цитате с википузии. Posted via ActualForum NNTP Server 1.5 ... | |||
| : 
 Нравится:
     Не нравится:
     | |||
| 12.02.2020, 18:26 |  | ||
| 
Теоретический вопрос по нормализации | |||
|---|---|---|---|
| #18+ Dimitry Sibiryakov Ключ. О котором и говорится в приведённой цитате с википузии. Ключ - атрибут или набор атрибутов, который однозначно определяет кортеж. Хотя если ключ - суррогатный, т.е. не существующий в предметной области, то может быть его и не надо считать атрибутом. Правда, для меня это новое слово в теории БД )))) С другой стороны, атрибут - вхождение домена в отношение. ... | |||
| : 
 Нравится:
     Не нравится:
     | |||
| 12.02.2020, 20:24 |  | ||
| 
Теоретический вопрос по нормализации | |||
|---|---|---|---|
| #18+ Ну ок, ок, пусть между Id и Teacher есть функциональная зависимость и таким образом  таблица нарушает вторую НФ. Как ты её нормализовывать теперь будешь? Posted via ActualForum NNTP Server 1.5 ... | |||
| : 
 Нравится:
     Не нравится:
     | |||
| 12.02.2020, 23:11 |  | ||
| 
Теоретический вопрос по нормализации | |||
|---|---|---|---|
| #18+ Dimitry Sibiryakov ...таблица нарушает вторую НФ. Как тВы её нормализовывать теперь будешьте? ПоправЕл, не благодариТЕ Докладываю. 2НФ - отсутствие частичных зависимостей от составного ключа. Если ключ не составной (как здесь), то отношение уже находится в 2НФ. В 3НФ оно находится потому, что отсутствуют транзитивные зависимости (ФЗ неключевых атрибутов от неключевых). А вот наличие двух возможных ключей ... ... | |||
| : 
 Нравится:
     Не нравится:
     | |||
| 12.02.2020, 23:31 |  | ||
| 
Теоретический вопрос по нормализации | |||
|---|---|---|---|
| #18+ Dimitry Sibiryakov пусть между Id и Teacher есть функциональная зависимость Главная проблема заключается в том, что наличие или отсутствие ФЗ формально не выводимо из данных, указанных в таблице, и доказать её можно только наличием примеров, что требует понимания модели данных предметной области. ... | |||
| : 
 Нравится:
     Не нравится:
     | |||
| 13.02.2020, 00:07 |  | ||
|  | 

| start [/forum/topic.php?fid=32&msg=39925628&tid=1539873]: | 0ms | 
| get settings: | 9ms | 
| get forum list: | 14ms | 
| check forum access: | 3ms | 
| check topic access: | 3ms | 
| track hit: | 39ms | 
| get topic data: | 11ms | 
| get forum data: | 3ms | 
| get page messages: | 60ms | 
| get tp. blocked users: | 1ms | 
| others: | 242ms | 
| total: | 385ms | 

| 0 / 0 | 
