Вот готовлюсь к возможным казусам на интервью
Поправьте меня там , где я неправ .
Говорят , что в теории баз данных существую5 форм нормализации .
Вроде каждая последующая является частным случаем предыдущей
1-я нормальная форма — Таблица представлена в первой нормальной форме (1НФ)
тогда и только тогда, когда все ее столбцы содержат только неделимые
значения и в ней отсутствуют повторяющиеся группы (столбцов) в пределах одной строки.Т.е. например столбик Фамилия_Имя_Отчество надо разбить на 3 столбика
2-я нормальная форма — это когда повторяющиеся значения в одном столбце
выносятся с помощью ключа в другую таблицу и в первой таблице уже идет
ссылка на id-шник из 2-й таблицы
3-я нормальная таблица — комбинация из повторяющихся значений может
быть вынесена с помощью ключа в отдельную таблицу
также невозможно удаление информации из базы
4-я нормальная форма — вот тут я не понял
5-я нормальная форма — это когда таблица не может далее разбиваться на более
мелкие таблицы посредством операции проектирования.
Так в чем вопрос-то?
Вот здесь вроде доходчиво: http://citforum.novgorod.net/database/dblearn/dblearn06.shtml
T>Вот готовлюсь к возможным казусам на интервью T>Поправьте меня там , где я неправ . T>Говорят , что в теории баз данных существую5 форм нормализации . T>Вроде каждая последующая является частным случаем предыдущей
T>1-я нормальная форма — Таблица представлена в первой нормальной форме (1НФ) T>тогда и только тогда, когда все ее столбцы содержат только неделимые T>значения и в ней отсутствуют повторяющиеся группы (столбцов) в пределах одной строки.Т.е. например столбик Фамилия_Имя_Отчество надо разбить на 3 столбика
T>2-я нормальная форма — это когда повторяющиеся значения в одном столбце T>выносятся с помощью ключа в другую таблицу и в первой таблице уже идет T>ссылка на id-шник из 2-й таблицы
T>3-я нормальная таблица — комбинация из повторяющихся значений может T>быть вынесена с помощью ключа в отдельную таблицу T>также невозможно удаление информации из базы
T>4-я нормальная форма — вот тут я не понял
T>5-я нормальная форма — это когда таблица не может далее разбиваться на более T> мелкие таблицы посредством операции проектирования.
Мдя — ну и формулировки на этой ссылке — свихнуться можно
Вот , например , определение 3НФ:
Атрибуты называются взаимно независимыми, если ни один из них не является функционально зависимым от другого.
Я например нихрена не понял.
Кстати , еще такой вопрос :
правильно ли сказано , что ссылочная целостность обеспечиается в основном
с помощью вторичного ключа ?
Здравствуйте, ttoorrmmoozz, Вы писали:
T>Мдя — ну и формулировки на этой ссылке — свихнуться можно
Нормальные формулировки.
T>Вот , например , определение 3НФ: T>Атрибуты называются взаимно независимыми, если ни один из них не является функционально зависимым от другого.
Ну во-первых это определение взаимно независимых атрибутов, а во-вторых вроде все правильно
T>Кстати , еще такой вопрос : T>правильно ли сказано , что ссылочная целостность обеспечиается в основном T>с помощью вторичного ключа ?
Хм, а ты сам то как себе это представляешь?
Возьмите книгу Дейта.
Там все более чем подробно описано.
Скажу честно, множественные зависимости (для 4 и 5 формы), как правило, плохо понимают даже "крутые перцы".
T>Мдя — ну и формулировки на этой ссылке — свихнуться можно T>Атрибуты называются взаимно независимыми, если ни один из них не является функционально зависимым от другого. T>Я например нихрена не понял.
Это, кстати, к вопросу об образовании, который так часто тут обсуждается.
Если бы человек проучился хотя бы первый семестр первого курса, то мог бы воспринимать точные формулировки.
Здравствуйте, ttoorrmmoozz, Вы писали:
T>Мдя — ну и формулировки на этой ссылке — свихнуться можно T>Вот , например , определение 3НФ: T>Атрибуты называются взаимно независимыми, если ни один из них не является функционально зависимым от другого. T>Я например нихрена не понял.
Сие означает, что в таблице не должно быть полей, значения которых зависят от других полей. Например, в таблице есть поля:
Код счет-фактуры
Код товара
Название товара
В данном случае поле "Название товара" функционально зависит от поля "Код товара", 3НФ не выполняется.
T>Кстати , еще такой вопрос : T>правильно ли сказано , что ссылочная целостность обеспечиается в основном T>с помощью вторичного ключа ?
Не, ну так уж совсем криво. Правильней сказать "Ссылочная целостность между таблицами в большинстве случаев поддерживается с помощью внешних органичений (FOREIGN CONSTRAINTS)". Поле, по которому таблица связывается с первичным ключом другой таблицы, называется внешним ключом (FOREIGN KEY), а никак не вторичным ключом.
Да , я тоже имел в виду форейшн , просто обозвал его вторичным ключом .
Еще один момент про 3НФ : где-то я прочитал , что в базе , в которой выполняется 3НФ ,
невозможно удаление физической информации .
Т.е. хранение информации организована с помощью специальных дополнительных таблиц
верхнего абстрактного уровня , которые хранят в себе только ссылки и свззи на таблицы ,
в которых хранится реальная физическая информация .
И удаляются строки именно этих абстрактных таблиц , а реальная информация остается
Я прав ?
ttoorrmmoozz wrote: > > Еще один момент про 3НФ : где-то я прочитал , что в базе , в которой > выполняется 3НФ , > невозможно удаление физической информации . > Т.е. хранение информации организована с помощью специальных > дополнительных таблиц > верхнего абстрактного уровня , которые хранят в себе только ссылки и > свззи на таблицы , > в которых хранится реальная физическая информация . > И удаляются строки именно этих абстрактных таблиц , а реальная > информация остается
Чушь.
> Я прав ?
Тоже чушь. Не "прав — неправ", а "верно — неверно".
Здравствуйте, ttoorrmmoozz, Вы писали:
T>Вот готовлюсь к возможным казусам на интервью T>Поправьте меня там , где я неправ .
Думаю, что "казус" на интервью может случиться, если вы не определение правильно произнесёте, а не ответите на вопрос "зачем это, собственно нужно" или "как нормализовать структуру БД". Ещё каверзнее вопрос — "как денормализовать структуру, чтобы повысить, к примеру, производительность, и какие дополнительные усилия нужно приложить, чтобы сохранить целостность данных после денормализации".
Вот ответите на эти вопросы и, думаю, ни один нормальный интервьюер до вас не докопается...
Здравствуйте, ttoorrmmoozz, Вы писали:
T>Да , я тоже имел в виду форейшн , просто обозвал его вторичным ключом .
Я так и понял. Однако, неправильные термины на интервью употреблять нельзя. Я бы, например, наверняка докопался.
T>Еще один момент про 3НФ : где-то я прочитал , что в базе , в которой выполняется 3НФ , T>невозможно удаление физической информации.
Никаких противопоказаний к удалению не существует. Бывают, впрочем, базы, данные в которых хранятся вечно. Потому что так надо.
T>Т.е. хранение информации организована с помощью специальных дополнительных таблиц T>верхнего абстрактного уровня , которые хранят в себе только ссылки и свззи на таблицы , T>в которых хранится реальная физическая информация . T>И удаляются строки именно этих абстрактных таблиц , а реальная информация остается
В базах, где данные хранятся вечно, записи не удаляются, а помечаются на удаление, и извлекаются запросами типа
select * from MyTable where isDeleted = 0
Часто для таких типовых запросов создают представления (VIEW). Подозреваю, что под "специальными дополнительными таблицами" как раз и подразумеваются представления. Если я правильно догадался, то имейте в виду, что представления — это не таблицы, ссылки и связи они не хранят.
Могу наврать, не занимался ьазами лет пять, память уже не та..
T>1-я нормальная форма — Таблица представлена в первой нормальной форме (1НФ) T>тогда и только тогда, когда все ее столбцы содержат только неделимые T>значения и в ней отсутствуют повторяющиеся группы (столбцов) в пределах одной строки.Т.е. например столбик Фамилия_Имя_Отчество надо разбить на 3 столбика
Все проще — данные представлены в виде двумерных отношений (таблиц), каждых аттрибут (поле) которых атомарен (т.е. не разбиваем на мелкие). Атомарность — понятие филосовское. Напри мер ИНН 18234567 для одного приложения атомарен, а для другого — нет (может разбит на код региона, номер, контрольную цифру, например я точно знаю что первые две цифры 18 говорят о том что ИНН выдан в Удмуртии)
T>2-я нормальная форма — это когда повторяющиеся значения в одном столбце T>выносятся с помощью ключа в другую таблицу и в первой таблице уже идет T>ссылка на id-шник из 2-й таблицы
Вы батенька совсем про другое — это факторизация. Вторая НФ говорит только о том, что все атрибуты зависят от первичного ключа. Зависят или нет — это тоже понятие филосовское, определяемое субъективно.
T>3-я нормальная таблица — комбинация из повторяющихся значений может T>быть вынесена с помощью ключа в отдельную таблицу T>также невозможно удаление информации из базы
Вы путаете следствие с причиной. Третья НФ — все атрибуты отношения зависят от первичного ключа нетранзитивно. Повторяются они или нет — пофиг.
Например
ИНН Фамилия №машины МодельМашины ТипКузова ЦветМашины
в данном случае ТипКузова и ЦветМашины зависят от ИНН транзитивно,
№машины зависит от того кто ее хозяин (а хозяин уникально идентифицируется
ИНН), а вот ТипКкузова и ЦветМашины — зависят скорее от ее номера (у машины с определенным номером — свой кузов и цвет)
Еще совет — освойте терминологию реляционной алгебры и реляционного исчисления, а то вы говорите на языке чайников. Нет в реляционной теории понятий "таблица","столбец","строка" — есть "отношение", "атрибут", "кортеж".
Здравствуйте, slskor, Вы писали:
T>>Да , я тоже имел в виду форейшн , просто обозвал его вторичным ключом . S>Я так и понял. Однако, неправильные термины на интервью употреблять нельзя. Я бы, например, наверняка докопался.
А к чему докапываться-то? Одно дело, знать что это делает и другое — знать как это называтся. Совсем другое дело — недорасказанность.
Здравствуйте, AntZ, Вы писали:
AZ>Еще совет — освойте терминологию реляционной алгебры и реляционного исчисления, а то вы говорите на языке чайников. Нет в реляционной теории понятий "таблица","столбец","строка" — есть "отношение", "атрибут", "кортеж".
Это не язык чайников. Данные понятия, если мне не изменяет память, введы sql server'ом.
Здравствуйте, Real 3L0, Вы писали:
R3>Здравствуйте, slskor, Вы писали:
T>>>Да , я тоже имел в виду форейшн , просто обозвал его вторичным ключом . S>>Я так и понял. Однако, неправильные термины на интервью употреблять нельзя. Я бы, например, наверняка докопался.
R3>А к чему докапываться-то? Одно дело, знать что это делает и другое — знать как это называтся. Совсем другое дело — недорасказанность.
Дело как раз в недорасказанности, в неточности. Докопался — это значит стал бы требовать рассказать детальнее о том, каким же образом вторичный ключ обеспечивает логическую целостность данных.
А вообще, имхо, термин "вторичный ключ" употребляется редко, поскольку не очен точен. Вторичный ключ можно перевести как secondary key, auxiliary key, в то время как единственно правильный перевод — foreign key. Но это мое личное мнение.
Здравствуйте, Real 3L0, Вы писали:
R3>Здравствуйте, AntZ, Вы писали:
AZ>>Еще совет — освойте терминологию реляционной алгебры и реляционного исчисления, а то вы говорите на языке чайников. Нет в реляционной теории понятий "таблица","столбец","строка" — есть "отношение", "атрибут", "кортеж".
R3>Это не язык чайников. Данные понятия, если мне не изменяет память, введы sql server'ом.
Показать себя человеком, подкованным в реляционной математике — это же круто!
Здравствуйте, Real 3L0, Вы писали:
R3>Здравствуйте, AntZ, Вы писали:
AZ>>Еще совет — освойте терминологию реляционной алгебры и реляционного исчисления, а то вы говорите на языке чайников. Нет в реляционной теории понятий "таблица","столбец","строка" — есть "отношение", "атрибут", "кортеж".
R3>Это не язык чайников. Данные понятия, если мне не изменяет память, введы sql server'ом.
А нормализация я так понимаю тоже введена SQL сервером? Как это ни странно, большинство программистов БД знающих SQL совершенно не знают что такое реляционные алгебра/исчисление и почему большинство современных баз реляционные. Половина программеров не может ответить что выдаст
SELECT * FROM table1 t1, table1 t2
из оставшейся половины две трети не могут сказать что это такое.
(наиболее общий и универсальный вид JOIN — декартово произведение. Все остальные внутренние JOIN являются проекциями декартова произведения)
Программер который хорошо знает SQL но не понимает основ теории БД для меня является БД кодером. Очень сомневаюсь что сможет грамотно спроектировать серьезную БД.
S>Показать себя человеком, подкованным в реляционной математике — это же круто!
В универе я понял одну простую вещь. Чтобы произвести благоприятное впечатление на преподавателя не обязательно хорошо знать предмет, но очень желательно уметь говорить на языке предмета. Если предмет разговора нормализация БД — то терминология одна, если SQL — терминология другая, и т.д.