Синтез-алгоритм для 3NF
Я изучаю базы данных и, очевидно, мне приходится иметь дело с обычными формами. Теперь я придумал этот очень простой пример; дано отношение R с атрибутами {A, B, C} и функциональными зависимостями {A, B -> C, A -> C}.
Ключ-кандидат K для этого отношения должен быть {A, B} (не вдаваясь в то, как найти ключи-кандидаты). Отношение не в 2NF, так как неключевой атрибут C зависит только от A, который является надлежащим подмножеством K.(Я предполагаю, что 1NF дается, хотя я не могу знать домены атрибутов).
Теперь, чтобы перейти к 3NF, мне нужно будет использовать алгоритм синтеза, поэтому я сначала найду канонический набор функциональных зависимостей, который будет {A -> C} (также не вдаваясь в то, как найти канонический набор). Теперь, чтобы получить отношения в 3NF, я формирую новое отношение R1, которое содержит атрибуты {A, C}. Поскольку K не содержится в R1, я должен создать новое отношение R2, которое содержит один из ключей-кандидатов (здесь K).
Это приводит к двум отношениям R1 (A,C) и R2 (A,B), и я готов, так как оба R1 и R2 находятся в 3NF.
Моя работа правильная? Есть ли что-то еще, что я должен знать? Большое спасибо за любые предложения!
РЕДАКТИРОВАТЬ: Как отметил комментарий, мой пример ошибочен. Это было бы правильно с немного другим отношением, а именно, R (A,B,C,D) с FD {A,B -> C, B -> D} .. Я не буду проходить остальное снова, так как я думаю, что я сделал алгоритм правильно, хотя пример был ложным.
1 ответ
дано отношение R с атрибутами {A, B, C} и функциональными зависимостями {A,B -> C, A -> C}
Укажите, что вы обращаетесь к нетривиальным FD. R также имеет FD A,B,C -> C, но это тривиально. Всегда четко указывайте, какие FD вы предоставляете. Например, каноническое / минимальное покрытие или все нетривиальные FD, или покрытие, или просто некоторые FD, которые, как вы знаете, хранятся, хотя другие нетривиальные тоже могут, в зависимости от того, что имеет место. Вы, вероятно, никогда не делаете последнее, потому что в общем случае вы не будете предоставлять достаточно информации для определения CK и дальнейшей нормализации.
Отношение не в 2NF, поскольку неключевой атрибут C зависит только от A, который является надлежащим подмножеством K.
Брось "только". Это делает утверждение неясным, и если вы имеете в виду, что C не зависит от A, B, то вы ошибаетесь.
(Я предполагаю, что 1NF дается, хотя я не могу знать домены атрибутов).
Домены не имеют значения. Я полагаю, вы обеспокоены тем, что домены могут включать "повторяющиеся группы" и / или "неатомарные значения". Это основано на полученной не мудрости. Нормализация в более высокие нормальные формы не зависит от доменов.
По определению, атрибут кортежа отношения имеет значение из домена. Re: "повторяющиеся группы": не может быть, это что-то из предреляционных баз данных. Re "неатомарная": Кодд определил отношения как способные иметь доменные отношения. Он указал, что единственный способ, которым значение можно считать (в повседневном смысле) неатомарным в реляционном контексте, - это оценивать отношения. Т.е. он определил "атомарный" в реляционном контексте, чтобы обозначить не отношение. Он определил "нормализованный", чтобы обозначить отсутствие относительных (то есть неатомарных) атрибутов. (Все это в 1970 году.) Позже он определил "1NF" как нормализованный. И разработали "2NF" и "3NF". Затем (после Кента и Бойса) "BCNF". Таким образом, его использование этих терминов не предполагало доменных отношений.
Но теория нормализации представлена независимо от областей. Т.е. считается, что это просто разложение по проблемным JD. Таким образом, "1NF" также используется для того, чтобы быть просто отношением. А остальные "НФ" привыкают независимо от доменов. (Хотя, если существуют домены, имеющие отношение к отношениям, то могут существовать ограничения, отличные от FD и JD, но похожие на них, которые вызывают разные, но сходные аномалии и которые вызывают ограничения и аномалии в компонентах даже после декомпозиции для всех проблемных JD.) Независимо от того, является ли отношение имеет домены со значениями отношения, и независимо от того, что вы подразумеваете под "1NF" или "нормализовано" или "нормализацией", процедура декомпозиции, которую вы выполняете, чтобы удалить проблемные JD из проблемных FD в то, что вы называете 3NF, не зависит от доменов,
Как отмечено в комментарии, мой пример ошибочен.
Этот комментарий:
Ваш пример указан неверно. Либо C зависит от A и B, либо зависит только от A. - Лоренцо Гатти
Комментарий неверный. C зависит от A и B и зависит только от A. Потому что A -> C подразумевает A,B -> C.